tray_network.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/chromeos/network/tray_network.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/ash_switches.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_icon_animation.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_list_detailed_view.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/chromeos/network/network_list_detailed_view_base.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_state_list_detailed_view.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_state_notifier.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_tray_delegate.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_constants.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_item_more.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_item_view.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/tray_notification_view.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/utf_string_conversions.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state_handler.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ash_resources.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/ash_strings.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/accessibility/accessible_view_state.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/link.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/link_listener.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ash::internal::TrayNetwork; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ash::NetworkObserver; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::NetworkState; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::NetworkStateHandler; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int GetMessageIcon(NetworkObserver::MessageType message_type, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::NetworkType network_type) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch(message_type) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkObserver::ERROR_CONNECT_FAILED: 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (NetworkObserver::NETWORK_CELLULAR == network_type) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IDR_AURA_UBER_TRAY_CELLULAR_NETWORK_FAILED; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IDR_AURA_UBER_TRAY_NETWORK_FAILED; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkObserver::ERROR_OUT_OF_CREDITS: 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkObserver::MESSAGE_DATA_PROMO: 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (network_type == TrayNetwork::NETWORK_CELLULAR_LTE) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IDR_AURA_UBER_TRAY_NOTIFICATION_LTE; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IDR_AURA_UBER_TRAY_NOTIFICATION_3G; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool UseNewNetworkHandlers() { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !CommandLine::ForCurrentProcess()->HasSwitch( 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::switches::kAshDisableNewNetworkStatusArea) && 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::IsInitialized(); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace tray { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkMessages { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct Message { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message() : delegate(NULL) {} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message(NetworkTrayDelegate* in_delegate, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::NetworkType network_type, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& in_title, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& in_message, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<string16>& in_links) : 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate(in_delegate), 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_type_(network_type), 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title(in_title), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message(in_message), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) links(in_links) {} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkTrayDelegate* delegate; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::NetworkType network_type_; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 title; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 message; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<string16> links; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::map<NetworkObserver::MessageType, Message> MessageMap; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageMap& messages() { return messages_; } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MessageMap& messages() const { return messages_; } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageMap messages_; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetworkTrayView : public TrayItemView, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public network_icon::AnimationObserver { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit NetworkTrayView(TrayNetwork* network_tray) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : TrayItemView(network_tray), 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_tray_(network_tray) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) image_view_ = new views::ImageView; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(image_view_); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkIconInfo info; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkStateHandlerIcon(); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->system_tray_delegate()-> 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetMostRelevantNetworkIcon(&info, false); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateIcon(info.tray_icon_visible, info.image); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NetworkTrayView() { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Update(const NetworkIconInfo& info) { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateIcon(info.tray_icon_visible, info.image); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateConnectionStatus(info.name, info.connected); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateNetworkStateHandlerIcon() { 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(UseNewNetworkHandlers()); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ImageSkia image; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 name; 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_tray_->GetNetworkStateHandlerImageAndLabel( 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::ICON_TYPE_TRAY, &image, &name); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_in_tray = !image.isNull(); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateIcon(show_in_tray, image); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* connected_network = handler->ConnectedNetworkByType( 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::kMatchTypeNonVirtual); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (connected_network) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateConnectionStatus(UTF8ToUTF16(connected_network->name()), true); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateConnectionStatus(string16(), false); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // views::View override. 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state->name = connection_status_string_; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // network_icon::AnimationObserver 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void NetworkIconChanged() OVERRIDE { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkStateHandlerIcon(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates connection status and notifies accessibility event when necessary. 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateConnectionStatus(const string16& network_name, bool connected) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 new_connection_status_string; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (connected) { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_connection_status_string = l10n_util::GetStringFUTF16( 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_CONNECTED, network_name); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_connection_status_string != connection_status_string_) { 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connection_status_string_ = new_connection_status_string; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if(!connection_status_string_.empty()) { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWidget()->NotifyAccessibilityEvent( 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, ui::AccessibilityTypes::EVENT_ALERT, true); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateIcon(bool tray_icon_visible, const gfx::ImageSkia& image) { 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) image_view_->SetImage(image); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetVisible(tray_icon_visible); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SchedulePaint(); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TrayNetwork* network_tray_; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ImageView* image_view_; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 connection_status_string_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkTrayView); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetworkDefaultView : public TrayItemMore, 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public network_icon::AnimationObserver { 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkDefaultView(TrayNetwork* network_tray, bool show_more) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : TrayItemMore(network_tray, show_more), 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_tray_(network_tray) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Update(); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NetworkDefaultView() { 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Update() { 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) { 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ImageSkia image; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 label; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_tray_->GetNetworkStateHandlerImageAndLabel( 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::ICON_TYPE_DEFAULT_VIEW, &image, &label); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetImage(&image); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetLabel(label); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetAccessibleName(label); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkIconInfo info; 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->system_tray_delegate()-> 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetMostRelevantNetworkIcon(&info, true); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetImage(&info.image); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetLabel(info.description); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetAccessibleName(info.description); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // network_icon::AnimationObserver 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void NetworkIconChanged() OVERRIDE { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Update(); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TrayNetwork* network_tray_; 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkDefaultView); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkWifiDetailedView : public NetworkDetailedView { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkWifiDetailedView(SystemTrayItem* owner, bool wifi_enabled) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : NetworkDetailedView(owner) { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTrayPopupPaddingHorizontal, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTrayPopupPaddingBetweenItems)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageView* image = new views::ImageView; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int image_id = wifi_enabled ? 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_ENABLED : IDR_AURA_UBER_TRAY_WIFI_DISABLED; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image->SetImage(bundle.GetImageNamed(image_id).ToImageSkia()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(image); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int string_id = wifi_enabled ? 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED: 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* label = 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new views::Label(bundle.GetLocalizedString(string_id)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label->SetMultiLine(true); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(label); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NetworkWifiDetailedView() {} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from NetworkDetailedView: 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Init() OVERRIDE { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NetworkDetailedView::DetailedViewType GetViewType() const OVERRIDE { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NetworkDetailedView::WIFI_VIEW; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ManagerChanged() OVERRIDE { 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void NetworkListChanged() OVERRIDE { 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void NetworkServiceChanged( 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::NetworkState* network) OVERRIDE { 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkWifiDetailedView); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkMessageView : public views::View, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::LinkListener { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkMessageView(TrayNetwork* tray_network, 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::MessageType message_type, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetworkMessages::Message& network_msg) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : tray_network_(tray_network), 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_type_(message_type), 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_type_(network_msg.network_type_) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLayoutManager( 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!network_msg.title.empty()) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* title = new views::Label(network_msg.title); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title->SetHorizontalAlignment(gfx::ALIGN_LEFT); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title->SetFont(title->font().DeriveFont(0, gfx::Font::BOLD)); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(title); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!network_msg.message.empty()) { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* message = new views::Label(network_msg.message); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message->SetHorizontalAlignment(gfx::ALIGN_LEFT); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message->SetMultiLine(true); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message->SizeToFit(kTrayNotificationContentsWidth); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(message); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!network_msg.links.empty()) { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < network_msg.links.size(); ++i) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Link* link = new views::Link(network_msg.links[i]); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link->set_id(i); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link->set_listener(this); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link->SetHorizontalAlignment(gfx::ALIGN_LEFT); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link->SetMultiLine(true); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) link->SizeToFit(kTrayNotificationContentsWidth); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(link); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NetworkMessageView() { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::LinkListener. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE { 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_network_->LinkClicked(message_type_, source->id()); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::MessageType message_type() const { return message_type_; } 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::NetworkType network_type() const { return network_type_; } 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TrayNetwork* tray_network_; 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::MessageType message_type_; 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkObserver::NetworkType network_type_; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkMessageView); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkNotificationView : public TrayNotificationView { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit NetworkNotificationView(TrayNetwork* tray_network) 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : TrayNotificationView(tray_network, 0), 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_network_(tray_network) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateMessageView(); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitView(network_message_view_); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetIconImage(*ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetMessageIcon(network_message_view_->message_type(), 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_message_view_->network_type()))); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from TrayNotificationView. 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnClose() OVERRIDE { 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_network_->ClearNetworkMessage(network_message_view_->message_type()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnClickAction() OVERRIDE { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (network_message_view_->message_type() != 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TrayNetwork::MESSAGE_DATA_PROMO) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_network_->PopupDetailedView(0, true); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Update() { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateMessageView(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateViewAndImage(network_message_view_, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetMessageIcon(network_message_view_->message_type(), 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_message_view_->network_type()))); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateMessageView() { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display the first (highest priority) message. 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(!tray_network_->messages()->messages().empty()); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkMessages::MessageMap::const_iterator iter = 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_network_->messages()->messages().begin(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_message_view_ = 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new NetworkMessageView(tray_network_, iter->first, iter->second); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TrayNetwork* tray_network_; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tray::NetworkMessageView* network_message_view_; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkNotificationView); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace tray 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrayNetwork::TrayNetwork(SystemTray* system_tray) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SystemTrayItem(system_tray), 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_(NULL), 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_(NULL), 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_(NULL), 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_(NULL), 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messages_(new tray::NetworkMessages()), 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_wifi_view_(false) { 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_state_observer_.reset(new TrayNetworkStateObserver(this)); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (NetworkStateHandler::IsInitialized()) 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_state_notifier_.reset(new NetworkStateNotifier()); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->system_tray_notifier()->AddNetworkObserver(this); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TrayNetwork::~TrayNetwork() { 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_state_notifier_.reset(); 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->system_tray_notifier()->RemoveNetworkObserver(this); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayNetwork::CreateTrayView(user::LoginStatus status) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(tray_ == NULL); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_ = new tray::NetworkTrayView(this); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tray_; 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayNetwork::CreateDefaultView(user::LoginStatus status) { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(default_ == NULL); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(tray_ != NULL); 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_ = new tray::NetworkDefaultView( 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, status != user::LOGGED_IN_LOCKED); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return default_; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayNetwork::CreateDetailedView(user::LoginStatus status) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(detailed_ == NULL); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear any notifications when showing the detailed view. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messages_->messages().clear(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HideNotificationView(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (request_wifi_view_) { 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate(); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The Wi-Fi state is not toggled yet at this point. 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_ = new tray::NetworkWifiDetailedView(this, 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !delegate->GetWifiEnabled()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_wifi_view_ = false; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UseNewNetworkHandlers()) { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_ = new tray::NetworkStateListDetailedView( 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, tray::NetworkStateListDetailedView::LIST_TYPE_NETWORK, status); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_ = new tray::NetworkListDetailedView( 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, status, IDS_ASH_STATUS_TRAY_NETWORK); 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_->Init(); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return detailed_; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* TrayNetwork::CreateNotificationView(user::LoginStatus status) { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(notification_ == NULL); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (messages_->messages().empty()) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; // Message has already been cleared. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_ = new tray::NetworkNotificationView(this); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return notification_; 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::DestroyTrayView() { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tray_ = NULL; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::DestroyDefaultView() { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_ = NULL; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::DestroyDetailedView() { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_ = NULL; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::DestroyNotificationView() { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_ = NULL; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::UpdateAfterLoginStatusChange(user::LoginStatus status) { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTrayImageItemBorder(tray_, alignment); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::OnNetworkRefresh(const NetworkIconInfo& info) { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tray_) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tray_->Update(info); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (default_) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_->Update(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (detailed_) 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_->ManagerChanged(); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::SetNetworkMessage(NetworkTrayDelegate* delegate, 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MessageType message_type, 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkType network_type, 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& title, 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& message, 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<string16>& links) { 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) messages_->messages()[message_type] = tray::NetworkMessages::Message( 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate, network_type, title, message, links); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!Shell::GetInstance()->system_tray_delegate()->IsOobeCompleted()) 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (notification_) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_->Update(); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowNotificationView(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::ClearNetworkMessage(MessageType message_type) { 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messages_->messages().erase(message_type); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (messages_->messages().empty()) { 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HideNotificationView(); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (notification_) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_->Update(); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowNotificationView(); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::OnWillToggleWifi() { 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Triggered by a user action (e.g. keyboard shortcut) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!detailed_ || 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) detailed_->GetViewType() == tray::NetworkDetailedView::WIFI_VIEW) { 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_wifi_view_ = true; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopupDetailedView(kTrayPopupAutoCloseDelayForTextInSeconds, false); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetwork::NetworkStateChanged(bool list_changed) { 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (tray_ && UseNewNetworkHandlers()) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tray_->UpdateNetworkStateHandlerIcon(); 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (default_) 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_->Update(); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (detailed_) { 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_changed) 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_->NetworkListChanged(); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_->ManagerChanged(); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetwork::NetworkServiceChanged(const chromeos::NetworkState* network) { 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (detailed_) 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) detailed_->NetworkServiceChanged(network); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetwork::GetNetworkStateHandlerImageAndLabel( 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::IconType icon_type, 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ImageSkia* image, 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16* label) { 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* connected_network = handler->ConnectedNetworkByType( 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::kMatchTypeNonVirtual); 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* connecting_network = handler->ConnectingNetworkByType( 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::kMatchTypeWireless); 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!connecting_network && icon_type == network_icon::ICON_TYPE_TRAY) 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_network = handler->ConnectingNetworkByType(flimflam::kTypeVPN); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network; 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If we are connecting to a network, and there is either no connected 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // network, or the connection was user requested, use the connecting 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // network. 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (connecting_network && 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (!connected_network || 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->connecting_network() == connecting_network->path())) { 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network = connecting_network; 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network = connected_network; 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't show ethernet in the tray 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (icon_type == network_icon::ICON_TYPE_TRAY && 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network && network->type() == flimflam::kTypeEthernet) { 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *image = gfx::ImageSkia(); 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) { 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If no connecting network, check if we are activating a network. 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* mobile_network = handler->FirstNetworkByType( 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::kMatchTypeMobile); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (mobile_network && (mobile_network->activation_state() == 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kActivationStateActivating)) { 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network = mobile_network; 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) { 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If no connecting network, check for cellular initializing. 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int uninitialized_msg = network_icon::GetCellularUninitializedMsg(); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (uninitialized_msg != 0) { 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *image = network_icon::GetImageForConnectingNetwork( 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_type, flimflam::kTypeCellular); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (label) 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *label = l10n_util::GetStringUTF16(uninitialized_msg); 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Otherwise show the disconnected wifi icon. 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *image = network_icon::GetImageForDisconnectedNetwork( 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_type, flimflam::kTypeWifi); 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (label) { 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *label = l10n_util::GetStringUTF16( 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_NOT_CONNECTED); 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get icon and label for connected or connecting network. 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *image = network_icon::GetImageForNetwork(network, icon_type); 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (label) 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *label = network_icon::GetLabelForNetwork(network, icon_type); 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TrayNetwork::LinkClicked(MessageType message_type, int link_id) { 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tray::NetworkMessages::MessageMap::const_iterator iter = 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) messages()->messages().find(message_type); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter != messages()->messages().end() && iter->second.delegate) 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter->second.delegate->NotificationLinkClicked(message_type, link_id); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 630