OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/status/power_menu_button.h" | 5 #include "chrome/browser/chromeos/status/power_menu_button.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 PreferredSizeChanged(); | 154 PreferredSizeChanged(); |
155 // Force a paint even if the size didn't change. | 155 // Force a paint even if the size didn't change. |
156 SchedulePaint(); | 156 SchedulePaint(); |
157 } | 157 } |
158 | 158 |
159 protected: | 159 protected: |
160 void OnPaint(gfx::Canvas* canvas) { | 160 void OnPaint(gfx::Canvas* canvas) { |
161 SkBitmap image; | 161 SkBitmap image; |
162 | 162 |
163 bool draw_percentage_text = false; | 163 bool draw_percentage_text = false; |
164 if (!CrosLibrary::Get()->EnsureLoaded()) { | 164 if (!menu_button_->battery_is_present_) { |
165 image = GetUnknownImage(LARGE); | |
166 } else if (!menu_button_->battery_is_present_) { | |
167 image = GetMissingImage(LARGE); | 165 image = GetMissingImage(LARGE); |
168 } else { | 166 } else { |
169 image = GetImage( | 167 image = GetImage( |
170 LARGE, | 168 LARGE, |
171 menu_button_->line_power_on_ ? CHARGING : DISCHARGING, | 169 menu_button_->line_power_on_ ? CHARGING : DISCHARGING, |
172 menu_button_->battery_index_); | 170 menu_button_->battery_index_); |
173 if (menu_button_->battery_percentage_ < 100 || | 171 if (menu_button_->battery_percentage_ < 100 || |
174 !menu_button_->line_power_on_) { | 172 !menu_button_->line_power_on_) { |
175 draw_percentage_text = true; | 173 draw_percentage_text = true; |
176 } | 174 } |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 //////////////////////////////////////////////////////////////////////////////// | 307 //////////////////////////////////////////////////////////////////////////////// |
310 // PowerMenuButton, views::View implementation: | 308 // PowerMenuButton, views::View implementation: |
311 void PowerMenuButton::OnLocaleChanged() { | 309 void PowerMenuButton::OnLocaleChanged() { |
312 UpdateIconAndLabelInfo(); | 310 UpdateIconAndLabelInfo(); |
313 } | 311 } |
314 | 312 |
315 //////////////////////////////////////////////////////////////////////////////// | 313 //////////////////////////////////////////////////////////////////////////////// |
316 // PowerMenuButton, views::ViewMenuDelegate implementation: | 314 // PowerMenuButton, views::ViewMenuDelegate implementation: |
317 | 315 |
318 void PowerMenuButton::RunMenu(views::View* source, const gfx::Point& pt) { | 316 void PowerMenuButton::RunMenu(views::View* source, const gfx::Point& pt) { |
| 317 // Explicitly query the power status. |
| 318 CrosLibrary::Get()->GetPowerLibrary()->RequestStatusUpdate(); |
| 319 |
319 views::MenuItemView* menu = new views::MenuItemView(this); | 320 views::MenuItemView* menu = new views::MenuItemView(this); |
320 // MenuRunner takes ownership of |menu|. | 321 // MenuRunner takes ownership of |menu|. |
321 menu_runner_.reset(new views::MenuRunner(menu)); | 322 menu_runner_.reset(new views::MenuRunner(menu)); |
322 views::MenuItemView* submenu = menu->AppendMenuItem( | 323 views::MenuItemView* submenu = menu->AppendMenuItem( |
323 POWER_BATTERY_PERCENTAGE_ITEM, | 324 POWER_BATTERY_PERCENTAGE_ITEM, |
324 std::wstring(), | 325 std::wstring(), |
325 views::MenuItemView::NORMAL); | 326 views::MenuItemView::NORMAL); |
326 status_ = new StatusView(this); | 327 status_ = new StatusView(this); |
327 submenu->AddChildView(status_); | 328 submenu->AddChildView(status_); |
328 menu->CreateSubmenu()->set_resize_open_menu(true); | 329 menu->CreateSubmenu()->set_resize_open_menu(true); |
(...skipping 18 matching lines...) Expand all Loading... |
347 | 348 |
348 void PowerMenuButton::PowerChanged(PowerLibrary* obj) { | 349 void PowerMenuButton::PowerChanged(PowerLibrary* obj) { |
349 UpdateIconAndLabelInfo(); | 350 UpdateIconAndLabelInfo(); |
350 } | 351 } |
351 | 352 |
352 //////////////////////////////////////////////////////////////////////////////// | 353 //////////////////////////////////////////////////////////////////////////////// |
353 // PowerMenuButton, StatusAreaButton implementation: | 354 // PowerMenuButton, StatusAreaButton implementation: |
354 | 355 |
355 void PowerMenuButton::UpdateIconAndLabelInfo() { | 356 void PowerMenuButton::UpdateIconAndLabelInfo() { |
356 PowerLibrary* cros = CrosLibrary::Get()->GetPowerLibrary(); | 357 PowerLibrary* cros = CrosLibrary::Get()->GetPowerLibrary(); |
357 if (!cros) | |
358 return; | |
359 | 358 |
360 bool cros_loaded = CrosLibrary::Get()->EnsureLoaded(); | 359 battery_is_present_ = cros->battery_is_present(); |
361 if (cros_loaded) { | 360 line_power_on_ = cros->line_power_on(); |
362 battery_is_present_ = cros->battery_is_present(); | |
363 line_power_on_ = cros->line_power_on(); | |
364 | 361 |
365 // If fully charged, always show 100% even if internal number is a bit less. | 362 // If fully charged, always show 100% even if internal number is a bit less. |
366 if (cros->battery_fully_charged()) { | 363 if (cros->battery_fully_charged()) { |
367 // We always call cros->battery_percentage() for test predictability. | 364 // We always call cros->battery_percentage() for test predictability. |
368 cros->battery_percentage(); | 365 cros->battery_percentage(); |
369 battery_percentage_ = 100.0; | 366 battery_percentage_ = 100.0; |
370 } else { | 367 } else { |
371 battery_percentage_ = cros->battery_percentage(); | 368 battery_percentage_ = cros->battery_percentage(); |
372 } | |
373 | |
374 UpdateBatteryTime(&battery_time_to_full_, cros->battery_time_to_full()); | |
375 UpdateBatteryTime(&battery_time_to_empty_, cros->battery_time_to_empty()); | |
376 } | 369 } |
377 | 370 |
378 if (!cros_loaded) { | 371 UpdateBatteryTime(&battery_time_to_full_, cros->battery_time_to_full()); |
379 battery_index_ = -1; | 372 UpdateBatteryTime(&battery_time_to_empty_, cros->battery_time_to_empty()); |
380 SetIcon(GetUnknownImage(SMALL)); | 373 |
381 } else if (!battery_is_present_) { | 374 if (!battery_is_present_) { |
382 battery_index_ = -1; | 375 battery_index_ = -1; |
383 SetIcon(GetMissingImage(SMALL)); | 376 SetIcon(GetMissingImage(SMALL)); |
384 } else { | 377 } else { |
385 // Preserve the fully charged icon for 100% only. | 378 // Preserve the fully charged icon for 100% only. |
386 if (battery_percentage_ >= 100) { | 379 if (battery_percentage_ >= 100) { |
387 battery_index_ = kNumPowerImages - 1; | 380 battery_index_ = kNumPowerImages - 1; |
388 } else { | 381 } else { |
389 battery_index_ = | 382 battery_index_ = |
390 static_cast<int>(battery_percentage_ / 100.0 * | 383 static_cast<int>(battery_percentage_ / 100.0 * |
391 nextafter(static_cast<float>(kNumPowerImages - 1), 0)); | 384 nextafter(static_cast<float>(kNumPowerImages - 1), 0)); |
(...skipping 22 matching lines...) Expand all Loading... |
414 // If previous is 0, then it either was never set (initial condition) | 407 // If previous is 0, then it either was never set (initial condition) |
415 // or got down to 0. | 408 // or got down to 0. |
416 if (*previous == TimeDelta::FromMicroseconds(kInitialMS) || | 409 if (*previous == TimeDelta::FromMicroseconds(kInitialMS) || |
417 diff < kMinDiff || | 410 diff < kMinDiff || |
418 diff > kMaxDiff) { | 411 diff > kMaxDiff) { |
419 *previous = current; | 412 *previous = current; |
420 } | 413 } |
421 } | 414 } |
422 | 415 |
423 } // namespace chromeos | 416 } // namespace chromeos |
OLD | NEW |