Index: ash/system/update/tray_update.cc |
diff --git a/ash/system/update/tray_update.cc b/ash/system/update/tray_update.cc |
index a88ae9c671d86f174fbb3b2a2568b7e6361fe6a6..b4a186f42377082d211ac6d1829208c1702e23a0 100644 |
--- a/ash/system/update/tray_update.cc |
+++ b/ash/system/update/tray_update.cc |
@@ -60,6 +60,9 @@ bool TrayUpdate::update_required_ = false; |
mojom::UpdateSeverity TrayUpdate::severity_ = mojom::UpdateSeverity::NONE; |
// static |
bool TrayUpdate::factory_reset_required_ = false; |
+// static |
+bool TrayUpdate::update_over_cellular_available_ = false; |
+ |
mojom::UpdateType TrayUpdate::update_type_ = mojom::UpdateType::SYSTEM; |
// The "restart to update" item in the system tray menu. |
@@ -85,6 +88,10 @@ class TrayUpdate::UpdateView : public ActionableView { |
IDS_ASH_STATUS_TRAY_RESTART_AND_POWERWASH_TO_UPDATE); |
} else if (owner->update_type_ == mojom::UpdateType::FLASH) { |
label_text = bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_UPDATE_FLASH); |
+ } else if (!owner->update_required_ && |
+ owner->update_over_cellular_available_) { |
+ label_text = bundle.GetLocalizedString( |
+ IDS_ASH_STATUS_TRAY_UPDATE_OVER_CELLULAR_AVAILABLE); |
} else { |
label_text = bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_UPDATE); |
} |
@@ -106,10 +113,17 @@ class TrayUpdate::UpdateView : public ActionableView { |
private: |
// Overridden from ActionableView. |
- bool PerformAction(const ui::Event& event) override { |
- Shell::Get()->system_tray_controller()->RequestRestartForUpdate(); |
- ShellPort::Get()->RecordUserMetricsAction( |
- UMA_STATUS_AREA_OS_UPDATE_DEFAULT_SELECTED); |
+ bool PerformAction(const ui::Event& /* event */) override { |
+ DCHECK(update_required_ || update_over_cellular_available_); |
+ if (update_required_) { |
+ Shell::Get()->system_tray_controller()->RequestRestartForUpdate(); |
+ ShellPort::Get()->RecordUserMetricsAction( |
+ UMA_STATUS_AREA_OS_UPDATE_DEFAULT_SELECTED); |
+ } else { |
+ // Opens about Chrome OS page, after which checks for update. |
+ Shell::Get()->system_tray_controller()->ShowAboutChromeOS(); |
+ Shell::Get()->system_tray_controller()->RequestUpdateCheck(); |
+ } |
CloseSystemBubble(); |
return true; |
} |
@@ -125,11 +139,11 @@ TrayUpdate::~TrayUpdate() {} |
bool TrayUpdate::GetInitialVisibility() { |
// If chrome tells ash there is an update available before this item's system |
// tray is constructed then show the icon. |
- return update_required_; |
+ return update_required_ || update_over_cellular_available_; |
} |
views::View* TrayUpdate::CreateDefaultView(LoginStatus status) { |
- if (update_required_) { |
+ if (update_required_ || update_over_cellular_available_) { |
update_view_ = new UpdateView(this); |
return update_view_; |
} |
@@ -158,4 +172,14 @@ views::Label* TrayUpdate::GetLabelForTesting() { |
return update_view_ ? update_view_->update_label_ : nullptr; |
} |
+void TrayUpdate::ShowUpdateOverCellularAvailableIcon() { |
+ update_over_cellular_available_ = true; |
+ |
+ // TODO(weidongg/691108): adjust severity according the amount of time passing |
+ // after update is available over cellular connection. |
+ // Use low severity for update available over cellular connection. |
+ SetIconColor(IconColorForUpdateSeverity(mojom::UpdateSeverity::LOW, false)); |
+ tray_view()->SetVisible(true); |
+} |
+ |
} // namespace ash |