12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ash/system/network/wifi_toggle_notification_controller.h"
- #include "ash/shell.h"
- #include "ash/strings/grit/ash_strings.h"
- #include "ash/system/model/system_tray_model.h"
- #include "ash/system/network/network_icon.h"
- #include "ash/system/network/tray_network_state_model.h"
- #include "ash/system/tray/system_tray_notifier.h"
- #include "base/metrics/user_metrics.h"
- #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
- #include "ui/base/l10n/l10n_util.h"
- #include "ui/message_center/message_center.h"
- #include "ui/message_center/public/cpp/notification.h"
- using chromeos::network_config::mojom::DeviceStateProperties;
- using chromeos::network_config::mojom::DeviceStateType;
- using chromeos::network_config::mojom::NetworkType;
- using message_center::Notification;
- namespace ash {
- namespace {
- constexpr char kWifiToggleNotificationId[] = "wifi-toggle";
- constexpr char kNotifierWifiToggle[] = "ash.wifi-toggle";
- std::unique_ptr<Notification> CreateNotification(bool wifi_enabled) {
- const int string_id = wifi_enabled
- ? IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED
- : IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED;
- std::unique_ptr<Notification> notification = std::make_unique<Notification>(
- message_center::NOTIFICATION_TYPE_SIMPLE, kWifiToggleNotificationId,
- std::u16string(), l10n_util::GetStringUTF16(string_id),
- ui::ImageModel::FromImageSkia(
- network_icon::GetImageForWiFiEnabledState(wifi_enabled)),
- std::u16string() /* display_source */, GURL(),
- message_center::NotifierId(message_center::NotifierType::SYSTEM_COMPONENT,
- kNotifierWifiToggle,
- NotificationCatalogName::kWifiToggle),
- message_center::RichNotificationData(), nullptr);
- return notification;
- }
- } // namespace
- WifiToggleNotificationController::WifiToggleNotificationController() {
- Shell::Get()->system_tray_notifier()->AddNetworkObserver(this);
- }
- WifiToggleNotificationController::~WifiToggleNotificationController() {
- Shell::Get()->system_tray_notifier()->RemoveNetworkObserver(this);
- }
- void WifiToggleNotificationController::RequestToggleWifi() {
- message_center::MessageCenter* message_center =
- message_center::MessageCenter::Get();
- // Remove any existing notification.
- if (message_center->FindVisibleNotificationById(kWifiToggleNotificationId))
- message_center->RemoveNotification(kWifiToggleNotificationId, false);
- TrayNetworkStateModel* model =
- Shell::Get()->system_tray_model()->network_state_model();
- const DeviceStateProperties* wifi = model->GetDevice(NetworkType::kWiFi);
- // A WiFi device should always exist, but the model is not part of Shell
- // so just return to handle the edge case.
- if (!wifi)
- return;
- bool enabled = wifi->device_state == DeviceStateType::kEnabled;
- base::RecordAction(
- enabled ? base::UserMetricsAction("StatusArea_Network_WifiDisabled")
- : base::UserMetricsAction("StatusArea_Network_WifiEnabled"));
- model->SetNetworkTypeEnabledState(NetworkType::kWiFi, !enabled);
- // Create a new notification with the new state.
- message_center->AddNotification(CreateNotification(!enabled));
- }
- } // namespace ash
|