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

Side by Side Diff: ash/system/chromeos/power/power_status_view.cc

Issue 1014753003: Move low battery notification to Message Center. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ash/system/chromeos/power/power_status_view.h" 5 #include "ash/system/chromeos/power/power_status_view.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/shell_delegate.h" 8 #include "ash/shell_delegate.h"
9 #include "ash/system/chromeos/power/power_status.h" 9 #include "ash/system/chromeos/power/power_status.h"
10 #include "ash/system/chromeos/power/tray_power.h" 10 #include "ash/system/chromeos/power/tray_power.h"
11 #include "ash/system/tray/fixed_sized_image_view.h" 11 #include "ash/system/tray/fixed_sized_image_view.h"
12 #include "ash/system/tray/tray_constants.h" 12 #include "ash/system/tray/tray_constants.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "grit/ash_strings.h" 15 #include "grit/ash_strings.h"
16 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/l10n/time_format.h" 17 #include "ui/base/l10n/time_format.h"
18 #include "ui/base/resource/resource_bundle.h" 18 #include "ui/base/resource/resource_bundle.h"
19 #include "ui/views/controls/image_view.h" 19 #include "ui/views/controls/image_view.h"
20 #include "ui/views/controls/label.h" 20 #include "ui/views/controls/label.h"
21 #include "ui/views/layout/box_layout.h" 21 #include "ui/views/layout/box_layout.h"
22 #include "ui/views/layout/grid_layout.h" 22 #include "ui/views/layout/grid_layout.h"
23 23
24 namespace ash { 24 namespace ash {
25 25
26 // Padding between battery status text and battery icon on default view. 26 // Padding between battery status text and battery icon on default view.
27 const int kPaddingBetweenBatteryStatusAndIcon = 3; 27 const int kPaddingBetweenBatteryStatusAndIcon = 3;
28 28
29 PowerStatusView::PowerStatusView(ViewType view_type, 29 PowerStatusView::PowerStatusView(bool default_view_right_align)
30 bool default_view_right_align)
31 : default_view_right_align_(default_view_right_align), 30 : default_view_right_align_(default_view_right_align),
32 status_label_(NULL), 31 time_status_label_(new views::Label),
33 time_label_(NULL), 32 percentage_label_(new views::Label),
34 time_status_label_(NULL), 33 icon_(NULL) {
35 percentage_label_(NULL),
36 icon_(NULL),
37 view_type_(view_type) {
38 PowerStatus::Get()->AddObserver(this); 34 PowerStatus::Get()->AddObserver(this);
39 if (view_type == VIEW_DEFAULT) { 35 percentage_label_->SetEnabledColor(kHeaderTextColorNormal);
40 time_status_label_ = new views::Label; 36 LayoutView();
41 percentage_label_ = new views::Label;
42 percentage_label_->SetEnabledColor(kHeaderTextColorNormal);
43 LayoutDefaultView();
44 } else {
45 status_label_ = new views::Label;
46 time_label_ = new views::Label;
47 LayoutNotificationView();
48 }
49 OnPowerStatusChanged(); 37 OnPowerStatusChanged();
50 } 38 }
51 39
52 PowerStatusView::~PowerStatusView() { 40 PowerStatusView::~PowerStatusView() {
53 PowerStatus::Get()->RemoveObserver(this); 41 PowerStatus::Get()->RemoveObserver(this);
54 } 42 }
55 43
56 void PowerStatusView::OnPowerStatusChanged() { 44 void PowerStatusView::OnPowerStatusChanged() {
57 view_type_ == VIEW_DEFAULT ? 45 UpdateText();
58 UpdateTextForDefaultView() : UpdateTextForNotificationView();
59 46
60 if (icon_) { 47 if (icon_) {
61 icon_->SetImage( 48 icon_->SetImage(
62 PowerStatus::Get()->GetBatteryImage(PowerStatus::ICON_DARK)); 49 PowerStatus::Get()->GetBatteryImage(PowerStatus::ICON_DARK));
63 icon_->SetVisible(true); 50 icon_->SetVisible(true);
64 } 51 }
65 } 52 }
66 53
67 void PowerStatusView::LayoutDefaultView() { 54 void PowerStatusView::LayoutView() {
68 if (default_view_right_align_) { 55 if (default_view_right_align_) {
69 views::BoxLayout* layout = 56 views::BoxLayout* layout =
70 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 57 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0,
71 kPaddingBetweenBatteryStatusAndIcon); 58 kPaddingBetweenBatteryStatusAndIcon);
72 SetLayoutManager(layout); 59 SetLayoutManager(layout);
73 60
74 AddChildView(percentage_label_); 61 AddChildView(percentage_label_);
75 AddChildView(time_status_label_); 62 AddChildView(time_status_label_);
76 63
77 icon_ = new views::ImageView; 64 icon_ = new views::ImageView;
78 AddChildView(icon_); 65 AddChildView(icon_);
79 } else { 66 } else {
80 // PowerStatusView is left aligned on the system tray pop up item. 67 // PowerStatusView is left aligned on the system tray pop up item.
81 views::BoxLayout* layout = 68 views::BoxLayout* layout =
82 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 69 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0,
83 kTrayPopupPaddingBetweenItems); 70 kTrayPopupPaddingBetweenItems);
84 SetLayoutManager(layout); 71 SetLayoutManager(layout);
85 72
86 icon_ = new ash::FixedSizedImageView(0, ash::kTrayPopupItemHeight); 73 icon_ = new ash::FixedSizedImageView(0, ash::kTrayPopupItemHeight);
87 AddChildView(icon_); 74 AddChildView(icon_);
88 75
89 AddChildView(percentage_label_); 76 AddChildView(percentage_label_);
90 AddChildView(time_status_label_); 77 AddChildView(time_status_label_);
91 } 78 }
92 } 79 }
93 80
94 void PowerStatusView::LayoutNotificationView() { 81 void PowerStatusView::UpdateText() {
95 SetLayoutManager(
96 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
97 status_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
98 AddChildView(status_label_);
99
100 time_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
101 AddChildView(time_label_);
102 }
103
104 void PowerStatusView::UpdateTextForDefaultView() {
105 const PowerStatus& status = *PowerStatus::Get(); 82 const PowerStatus& status = *PowerStatus::Get();
106 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 83 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
107 base::string16 battery_percentage; 84 base::string16 battery_percentage;
108 base::string16 battery_time_status; 85 base::string16 battery_time_status;
109 86
110 if (status.IsBatteryFull()) { 87 if (status.IsBatteryFull()) {
111 battery_time_status = 88 battery_time_status =
112 rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_BATTERY_FULL); 89 rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_BATTERY_FULL);
113 } else { 90 } else {
114 battery_percentage = l10n_util::GetStringFUTF16( 91 battery_percentage = l10n_util::GetStringFUTF16(
(...skipping 26 matching lines...) Expand all
141 } 118 }
142 battery_percentage = battery_time_status.empty() ? 119 battery_percentage = battery_time_status.empty() ?
143 battery_percentage : battery_percentage + base::ASCIIToUTF16(" - "); 120 battery_percentage : battery_percentage + base::ASCIIToUTF16(" - ");
144 } 121 }
145 percentage_label_->SetVisible(!battery_percentage.empty()); 122 percentage_label_->SetVisible(!battery_percentage.empty());
146 percentage_label_->SetText(battery_percentage); 123 percentage_label_->SetText(battery_percentage);
147 time_status_label_->SetVisible(!battery_time_status.empty()); 124 time_status_label_->SetVisible(!battery_time_status.empty());
148 time_status_label_->SetText(battery_time_status); 125 time_status_label_->SetText(battery_time_status);
149 } 126 }
150 127
151 void PowerStatusView::UpdateTextForNotificationView() {
152 const PowerStatus& status = *PowerStatus::Get();
153 if (status.IsBatteryFull()) {
154 status_label_->SetText(
155 ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
156 IDS_ASH_STATUS_TRAY_BATTERY_FULL));
157 } else {
158 status_label_->SetText(
159 l10n_util::GetStringFUTF16(
160 IDS_ASH_STATUS_TRAY_BATTERY_PERCENT,
161 base::IntToString16(status.GetRoundedBatteryPercent())));
162 }
163
164 const base::TimeDelta time = status.IsBatteryCharging() ?
165 status.GetBatteryTimeToFull() : status.GetBatteryTimeToEmpty();
166
167 if (status.IsUsbChargerConnected()) {
168 time_label_->SetText(
169 ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
170 IDS_ASH_STATUS_TRAY_BATTERY_CHARGING_UNRELIABLE));
171 } else if (status.IsBatteryTimeBeingCalculated()) {
172 time_label_->SetText(
173 ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
174 IDS_ASH_STATUS_TRAY_BATTERY_CALCULATING));
175 } else if (PowerStatus::ShouldDisplayBatteryTime(time) &&
176 !status.IsBatteryDischargingOnLinePower()) {
177 int hour = 0, min = 0;
178 PowerStatus::SplitTimeIntoHoursAndMinutes(time, &hour, &min);
179 if (status.IsBatteryCharging()) {
180 time_label_->SetText(
181 l10n_util::GetStringFUTF16(
182 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_FULL,
183 base::IntToString16(hour),
184 base::IntToString16(min)));
185 } else {
186 // This is a low battery warning prompting the user in minutes.
187 time_label_->SetText(ui::TimeFormat::Simple(
188 ui::TimeFormat::FORMAT_REMAINING, ui::TimeFormat::LENGTH_LONG,
189 base::TimeDelta::FromMinutes(hour * 60 + min)));
190 }
191 } else {
192 time_label_->SetText(base::string16());
193 }
194 }
195
196 void PowerStatusView::ChildPreferredSizeChanged(views::View* child) { 128 void PowerStatusView::ChildPreferredSizeChanged(views::View* child) {
197 PreferredSizeChanged(); 129 PreferredSizeChanged();
198 } 130 }
199 131
200 gfx::Size PowerStatusView::GetPreferredSize() const { 132 gfx::Size PowerStatusView::GetPreferredSize() const {
201 gfx::Size size = views::View::GetPreferredSize(); 133 gfx::Size size = views::View::GetPreferredSize();
202 return gfx::Size(size.width(), kTrayPopupItemHeight); 134 return gfx::Size(size.width(), kTrayPopupItemHeight);
203 } 135 }
204 136
205 int PowerStatusView::GetHeightForWidth(int width) const { 137 int PowerStatusView::GetHeightForWidth(int width) const {
206 return kTrayPopupItemHeight; 138 return kTrayPopupItemHeight;
207 } 139 }
208 140
209 void PowerStatusView::Layout() { 141 void PowerStatusView::Layout() {
210 views::View::Layout(); 142 views::View::Layout();
211 143
212 // Move the time_status_label_ closer to percentage_label_. 144 // Move the time_status_label_ closer to percentage_label_.
213 if (percentage_label_ && time_status_label_ && 145 if (percentage_label_ && time_status_label_ &&
214 percentage_label_->visible() && time_status_label_->visible()) { 146 percentage_label_->visible() && time_status_label_->visible()) {
215 time_status_label_->SetX(percentage_label_->bounds().right() + 1); 147 time_status_label_->SetX(percentage_label_->bounds().right() + 1);
216 } 148 }
217 } 149 }
218 150
219 } // namespace ash 151 } // namespace ash
OLDNEW
« no previous file with comments | « ash/system/chromeos/power/power_status_view.h ('k') | ash/system/chromeos/power/power_status_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698