| OLD | NEW |
| 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/power/tray_power.h" | 5 #include "ash/system/power/tray_power.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
| 9 #include "ash/system/date/date_view.h" | 9 #include "ash/system/date/date_view.h" |
| 10 #include "ash/system/power/power_supply_status.h" | 10 #include "ash/system/power/power_supply_status.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 }; | 122 }; |
| 123 | 123 |
| 124 // This view is used only for the popup. | 124 // This view is used only for the popup. |
| 125 class PowerStatusView : public views::View { | 125 class PowerStatusView : public views::View { |
| 126 public: | 126 public: |
| 127 enum ViewType { | 127 enum ViewType { |
| 128 VIEW_DEFAULT, | 128 VIEW_DEFAULT, |
| 129 VIEW_NOTIFICATION | 129 VIEW_NOTIFICATION |
| 130 }; | 130 }; |
| 131 | 131 |
| 132 explicit PowerStatusView(ViewType view_type) { | 132 explicit PowerStatusView(ViewType view_type) : icon_(NULL) { |
| 133 status_label_ = new views::Label; | 133 status_label_ = new views::Label; |
| 134 status_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); | |
| 135 time_label_ = new views::Label; | 134 time_label_ = new views::Label; |
| 136 time_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); | |
| 137 | |
| 138 icon_ = new views::ImageView; | |
| 139 | |
| 140 AddChildView(status_label_); | |
| 141 AddChildView(time_label_); | |
| 142 AddChildView(icon_); | |
| 143 | 135 |
| 144 if (view_type == VIEW_DEFAULT) | 136 if (view_type == VIEW_DEFAULT) |
| 145 LayoutDefaultView(); | 137 LayoutDefaultView(); |
| 146 else | 138 else |
| 147 LayoutNotificationView(); | 139 LayoutNotificationView(); |
| 148 | 140 |
| 149 Update(); | 141 Update(); |
| 150 | |
| 151 set_border(views::Border::CreateEmptyBorder( | |
| 152 kPaddingVertical, kTrayPopupPaddingHorizontal, | |
| 153 kPaddingVertical, kTrayPopupPaddingHorizontal)); | |
| 154 } | 142 } |
| 155 | 143 |
| 156 virtual ~PowerStatusView() { | 144 virtual ~PowerStatusView() { |
| 157 } | 145 } |
| 158 | 146 |
| 159 void UpdatePowerStatus(const PowerSupplyStatus& status) { | 147 void UpdatePowerStatus(const PowerSupplyStatus& status) { |
| 160 supply_status_ = status; | 148 supply_status_ = status; |
| 161 // Sanitize. | 149 // Sanitize. |
| 162 if (supply_status_.battery_is_full) | 150 if (supply_status_.battery_is_full) |
| 163 supply_status_.battery_percentage = 100.0; | 151 supply_status_.battery_percentage = 100.0; |
| 164 | 152 |
| 165 Update(); | 153 Update(); |
| 166 } | 154 } |
| 167 | 155 |
| 168 private: | 156 private: |
| 169 void LayoutDefaultView() { | 157 void LayoutDefaultView() { |
| 158 set_border(views::Border::CreateEmptyBorder( |
| 159 kPaddingVertical, kTrayPopupPaddingHorizontal, |
| 160 kPaddingVertical, kTrayPopupPaddingHorizontal)); |
| 161 |
| 162 status_label_->SetHorizontalAlignment(views::Label::ALIGN_RIGHT); |
| 163 time_label_->SetHorizontalAlignment(views::Label::ALIGN_RIGHT); |
| 164 |
| 165 icon_ = new views::ImageView; |
| 166 |
| 170 views::GridLayout* layout = new views::GridLayout(this); | 167 views::GridLayout* layout = new views::GridLayout(this); |
| 171 SetLayoutManager(layout); | 168 SetLayoutManager(layout); |
| 172 | 169 |
| 173 views::ColumnSet* columns = layout->AddColumnSet(0); | 170 views::ColumnSet* columns = layout->AddColumnSet(0); |
| 174 | 171 |
| 175 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal); | 172 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal); |
| 176 // Status + Time | 173 // Status + Time |
| 177 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, | 174 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, |
| 178 0, views::GridLayout::USE_PREF, 0, kLabelMinWidth); | 175 0, views::GridLayout::USE_PREF, 0, kLabelMinWidth); |
| 179 | 176 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 192 layout->AddView(icon_, 1, 3); // 3 rows for icon | 189 layout->AddView(icon_, 1, 3); // 3 rows for icon |
| 193 | 190 |
| 194 layout->AddPaddingRow(0, kPaddingVertical/3); | 191 layout->AddPaddingRow(0, kPaddingVertical/3); |
| 195 layout->StartRow(0, 0); | 192 layout->StartRow(0, 0); |
| 196 layout->AddView(time_label_); | 193 layout->AddView(time_label_); |
| 197 | 194 |
| 198 layout->AddPaddingRow(0, kPaddingVertical); | 195 layout->AddPaddingRow(0, kPaddingVertical); |
| 199 } | 196 } |
| 200 | 197 |
| 201 void LayoutNotificationView() { | 198 void LayoutNotificationView() { |
| 202 const int msg_width = kTrayPopupWidth - kNotificationCloseButtonWidth - | 199 SetLayoutManager( |
| 203 kTrayPopupPaddingHorizontal - kNotificationIconWidth; | 200 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); |
| 201 status_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
| 202 AddChildView(status_label_); |
| 204 | 203 |
| 205 views::GridLayout* layout = new views::GridLayout(this); | 204 time_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
| 206 SetLayoutManager(layout); | 205 AddChildView(time_label_); |
| 207 | |
| 208 views::ColumnSet* columns = layout->AddColumnSet(0); | |
| 209 | |
| 210 // Icon | |
| 211 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, | |
| 212 0 /* resize percent */, | |
| 213 views::GridLayout::FIXED, | |
| 214 kNotificationIconWidth, kNotificationIconWidth); | |
| 215 | |
| 216 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal/2); | |
| 217 | |
| 218 // Status + Time | |
| 219 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, | |
| 220 0 /* resize percent */, | |
| 221 views::GridLayout::FIXED, msg_width, msg_width); | |
| 222 | |
| 223 // Layout rows | |
| 224 layout->AddPaddingRow(0, kTrayPopupPaddingBetweenItems); | |
| 225 | |
| 226 layout->StartRow(0, 0); | |
| 227 layout->AddView(icon_, 1, 2); // 2 rows for icon | |
| 228 layout->AddView(status_label_); | |
| 229 | |
| 230 layout->StartRow(0, 0); | |
| 231 layout->SkipColumns(1); | |
| 232 layout->AddView(time_label_); | |
| 233 | |
| 234 layout->AddPaddingRow(0, kPaddingVertical); | |
| 235 } | 206 } |
| 236 | 207 |
| 237 void UpdateText() { | 208 void UpdateText() { |
| 238 base::TimeDelta time = base::TimeDelta::FromSeconds( | 209 base::TimeDelta time = base::TimeDelta::FromSeconds( |
| 239 supply_status_.line_power_on ? | 210 supply_status_.line_power_on ? |
| 240 supply_status_.averaged_battery_time_to_full : | 211 supply_status_.averaged_battery_time_to_full : |
| 241 supply_status_.averaged_battery_time_to_empty); | 212 supply_status_.averaged_battery_time_to_empty); |
| 242 int hour = time.InHours(); | 213 int hour = time.InHours(); |
| 243 int min = (time - base::TimeDelta::FromHours(hour)).InMinutes(); | 214 int min = (time - base::TimeDelta::FromHours(hour)).InMinutes(); |
| 244 | 215 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 265 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_FULL : | 236 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_FULL : |
| 266 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_EMPTY, | 237 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_EMPTY, |
| 267 base::IntToString16(hour), | 238 base::IntToString16(hour), |
| 268 base::IntToString16(min))); | 239 base::IntToString16(min))); |
| 269 } else { | 240 } else { |
| 270 time_label_->SetText(string16()); | 241 time_label_->SetText(string16()); |
| 271 } | 242 } |
| 272 } | 243 } |
| 273 | 244 |
| 274 void UpdateIcon() { | 245 void UpdateIcon() { |
| 275 icon_->SetImage(GetBatteryImage(supply_status_, ICON_DARK)); | 246 if (icon_) { |
| 276 icon_->SetVisible(true); | 247 icon_->SetImage(GetBatteryImage(supply_status_, ICON_DARK)); |
| 248 icon_->SetVisible(true); |
| 249 } |
| 277 } | 250 } |
| 278 | 251 |
| 279 void Update() { | 252 void Update() { |
| 280 UpdateText(); | 253 UpdateText(); |
| 281 UpdateIcon(); | 254 UpdateIcon(); |
| 282 } | 255 } |
| 283 | 256 |
| 284 views::Label* status_label_; | 257 views::Label* status_label_; |
| 285 views::Label* time_label_; | 258 views::Label* time_label_; |
| 286 views::ImageView* icon_; | 259 views::ImageView* icon_; |
| 287 | 260 |
| 288 PowerSupplyStatus supply_status_; | 261 PowerSupplyStatus supply_status_; |
| 289 | 262 |
| 290 DISALLOW_COPY_AND_ASSIGN(PowerStatusView); | 263 DISALLOW_COPY_AND_ASSIGN(PowerStatusView); |
| 291 }; | 264 }; |
| 292 | 265 |
| 293 class PowerNotificationView : public TrayNotificationView { | 266 class PowerNotificationView : public TrayNotificationView { |
| 294 public: | 267 public: |
| 295 explicit PowerNotificationView(TrayPower* tray) | 268 explicit PowerNotificationView(TrayPower* tray) |
| 296 : tray_(tray) { | 269 : TrayNotificationView(0), |
| 270 tray_(tray) { |
| 297 power_status_view_ = | 271 power_status_view_ = |
| 298 new PowerStatusView(PowerStatusView::VIEW_NOTIFICATION); | 272 new PowerStatusView(PowerStatusView::VIEW_NOTIFICATION); |
| 299 InitView(power_status_view_); | 273 InitView(power_status_view_); |
| 300 } | 274 } |
| 301 | 275 |
| 302 void UpdatePowerStatus(const PowerSupplyStatus& status) { | 276 void UpdatePowerStatus(const PowerSupplyStatus& status) { |
| 277 SetIconImage(GetBatteryImage(status, ICON_DARK)); |
| 303 power_status_view_->UpdatePowerStatus(status); | 278 power_status_view_->UpdatePowerStatus(status); |
| 304 } | 279 } |
| 305 | 280 |
| 306 // Overridden from TrayNotificationView: | 281 // Overridden from TrayNotificationView: |
| 307 virtual void OnClose() OVERRIDE { | 282 virtual void OnClose() OVERRIDE { |
| 308 tray_->HideNotificationView(); | 283 tray_->HideNotificationView(); |
| 309 } | 284 } |
| 310 | 285 |
| 311 private: | 286 private: |
| 312 TrayPower* tray_; | 287 TrayPower* tray_; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 return false; | 395 return false; |
| 421 case NOTIFICATION_CRITICAL: | 396 case NOTIFICATION_CRITICAL: |
| 422 return false; | 397 return false; |
| 423 } | 398 } |
| 424 NOTREACHED(); | 399 NOTREACHED(); |
| 425 return false; | 400 return false; |
| 426 } | 401 } |
| 427 | 402 |
| 428 } // namespace internal | 403 } // namespace internal |
| 429 } // namespace ash | 404 } // namespace ash |
| OLD | NEW |