12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_state_list_detailed_view.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/ash_switches.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/metrics/user_metrics_recorder.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/root_window_controller.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shell_delegate.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell_window_ids.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/system/chromeos/network/network_connect.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/tray_network_state_observer.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/fixed_sized_scroll_view.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/hover_highlight_view.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_constants.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_details_view.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/tray/tray_popup_header_button.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/system/tray/tray_popup_label_button.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/message_loop/message_loop.h" 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/device_state.h" 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_configuration_handler.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state_handler.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/ash_resources.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/ash_strings.h" 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "grit/ui_chromeos_strings.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon.h" 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon_animation.h" 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/chromeos/network/network_info.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/bubble/bubble_delegate.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/label.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/layout/box_layout.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/layout/fill_layout.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using chromeos::DeviceState; 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using chromeos::NetworkHandler; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::NetworkState; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::NetworkStateHandler; 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)using chromeos::NetworkTypePattern; 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using ui::NetworkInfo; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace tray { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Delay between scan requests. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const int kRequestScanDelaySeconds = 10; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Create a label with the font size and color used in the network info bubble. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)views::Label* CreateInfoBubbleLabel(const base::string16& text) { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Label* label = new views::Label(text); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) label->SetFontList(rb.GetFontList(ui::ResourceBundle::SmallFont)); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label->SetEnabledColor(SkColorSetARGB(127, 0, 0, 0)); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return label; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Create a row of labels for the network info bubble. 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)views::View* CreateInfoBubbleLine(const base::string16& text_label, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& text_string) { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* view = new views::View; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->SetLayoutManager( 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 1)); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->AddChildView(CreateInfoBubbleLabel(text_label)); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view->AddChildView(CreateInfoBubbleLabel(base::UTF8ToUTF16(": "))); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view->AddChildView(CreateInfoBubbleLabel(base::UTF8ToUTF16(text_string))); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// A bubble which displays network info. 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class NetworkStateListDetailedView::InfoBubble 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : public views::BubbleDelegateView { 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) InfoBubble(views::View* anchor, 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) views::View* content, 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NetworkStateListDetailedView* detailed_view) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_RIGHT), 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) detailed_view_(detailed_view) { 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_can_activate(false); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) set_parent_window(ash::Shell::GetContainer( 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) anchor->GetWidget()->GetNativeWindow()->GetRootWindow(), 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ash::kShellWindowId_SettingBubbleContainer)); 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SetLayoutManager(new views::FillLayout()); 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AddChildView(content); 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~InfoBubble() { 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) detailed_view_->OnInfoBubbleDestroyed(); 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Not owned. 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NetworkStateListDetailedView* detailed_view_; 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InfoBubble); 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)//------------------------------------------------------------------------------ 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// NetworkStateListDetailedView 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkStateListDetailedView::NetworkStateListDetailedView( 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SystemTrayItem* owner, 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ListType list_type, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user::LoginStatus login) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : NetworkDetailedView(owner), 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) list_type_(list_type), 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) login_(login), 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_(NULL), 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_(NULL), 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_(NULL), 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_(NULL), 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_(NULL), 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_(NULL), 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_vpn_(NULL), 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings_(NULL), 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_settings_(NULL), 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) info_bubble_(NULL), 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_list_view_(this) { 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkStateListDetailedView::~NetworkStateListDetailedView() { 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (info_bubble_) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_->GetWidget()->CloseNow(); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ManagerChanged() { 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateHeaderButtons(); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkExtra(); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::NetworkListChanged() { 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateHeaderButtons(); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkExtra(); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::NetworkServiceChanged( 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Overridden from NetworkDetailedView: 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::Init() { 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Reset(); 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch info_icon_ = NULL; 1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch button_wifi_ = NULL; 1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch button_mobile_ = NULL; 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch other_wifi_ = NULL; 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch turn_on_wifi_ = NULL; 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch other_mobile_ = NULL; 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch other_vpn_ = NULL; 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch settings_ = NULL; 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch proxy_settings_ = NULL; 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateScrollableList(); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateNetworkExtra(); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateHeaderEntry(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateHeaderButtons(); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_list_view_.set_content_view(scroll_content()); 1847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkListChanged(); 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallRequestScan(); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkDetailedView::DetailedViewType 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkStateListDetailedView::GetViewType() const { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return STATE_LIST_VIEW; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Views overrides 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ButtonPressed(views::Button* sender, 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Event& event) { 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == info_icon_) { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ToggleInfoBubble(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the info bubble was visible, close it when some other item is clicked. 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResetInfoBubble(); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::SystemTrayDelegate* delegate = 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate(); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == button_wifi_) { 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool enabled = handler->IsTechnologyEnabled( 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkTypePattern::WiFi()); 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->SetTechnologyEnabled(NetworkTypePattern::WiFi(), 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) !enabled, 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::network_handler::ErrorCallback()); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == turn_on_wifi_) { 21658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->SetTechnologyEnabled(NetworkTypePattern::WiFi(), 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) true, 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::network_handler::ErrorCallback()); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == button_mobile_) { 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ToggleMobile(); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == settings_) { 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Shell::GetInstance()->metrics()->RecordUserMetricsAction( 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) list_type_ == LIST_TYPE_VPN ? 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_VPN_SETTINGS_CLICKED : 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_NETWORK_SETTINGS_CLICKED); 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) delegate->ShowNetworkSettings(""); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == proxy_settings_) { 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ChangeProxySettings(); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == other_mobile_) { 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->ShowOtherNetworkDialog(shill::kTypeCellular); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == other_wifi_) { 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Shell::GetInstance()->metrics()->RecordUserMetricsAction( 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_NETWORK_JOIN_OTHER_CLICKED); 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->ShowOtherNetworkDialog(shill::kTypeWifi); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == other_vpn_) { 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Shell::GetInstance()->metrics()->RecordUserMetricsAction( 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_VPN_JOIN_OTHER_CLICKED); 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->ShowOtherNetworkDialog(shill::kTypeVPN); 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::OnViewClicked(views::View* sender) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the info bubble was visible, close it when some other item is clicked. 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResetInfoBubble(); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == footer()->content()) { 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TransitionToDefaultView(); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_LOCKED) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string service_path; 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!network_list_view_.IsViewInList(sender, &service_path)) 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetNetworkState(service_path); 2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!network || network->IsConnectedState() || network->IsConnectingState()) { 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Shell::GetInstance()->metrics()->RecordUserMetricsAction( 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) list_type_ == LIST_TYPE_VPN ? 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_SHOW_NETWORK_CONNECTION_DETAILS : 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_SHOW_VPN_CONNECTION_DETAILS); 2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Shell::GetInstance()->system_tray_delegate()->ShowNetworkSettings( 2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service_path); 2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Shell::GetInstance()->metrics()->RecordUserMetricsAction( 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) list_type_ == LIST_TYPE_VPN ? 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_CONNECT_TO_VPN : 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::UMA_STATUS_AREA_CONNECT_TO_CONFIGURED_NETWORK); 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ash::network_connect::ConnectToNetwork(service_path); 27590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Create UI components. 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateHeaderEntry() { 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSpecialRow(IDS_ASH_STATUS_TRAY_NETWORK, this); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateHeaderButtons() { 2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (list_type_ != LIST_TYPE_VPN) { 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_ = new TrayPopupHeaderButton( 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_ENABLED, 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_DISABLED, 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_ENABLED_HOVER, 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_DISABLED_HOVER, 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_WIFI); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_->SetTooltipText( 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISABLE_WIFI)); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_->SetToggledTooltipText( 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ENABLE_WIFI)); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) footer()->AddButton(button_wifi_); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_ = new TrayPopupHeaderButton( 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_ENABLED, 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_DISABLED, 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_ENABLED_HOVER, 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_DISABLED_HOVER, 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_CELLULAR); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_->SetTooltipText( 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISABLE_MOBILE)); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_->SetToggledTooltipText( 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ENABLE_MOBILE)); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) footer()->AddButton(button_mobile_); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_ = new TrayPopupHeaderButton( 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO, 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO, 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO_HOVER, 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO_HOVER, 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_INFO); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_->SetTooltipText( 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_INFO)); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) footer()->AddButton(info_icon_); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateNetworkExtra() { 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_LOCKED) 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* bottom_row = new views::View(); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BoxLayout* layout = new views::BoxLayout( 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BoxLayout::kHorizontal, 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayMenuBottomRowPadding, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayMenuBottomRowPadding, 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayMenuBottomRowPaddingBetweenItems); 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->SetDefaultFlex(1); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->SetLayoutManager(layout); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (list_type_ != LIST_TYPE_VPN) { 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_ = new TrayPopupLabelButton( 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_OTHER_WIFI)); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(other_wifi_); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_ = new TrayPopupLabelButton( 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_TURN_ON_WIFI)); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(turn_on_wifi_); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_ = new TrayPopupLabelButton( 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_OTHER_MOBILE)); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(other_mobile_); 3527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_vpn_ = new TrayPopupLabelButton( 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle::GetSharedInstance().GetLocalizedString( 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_OTHER_VPN)); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(other_vpn_); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSettingsEntry(); 361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Both settings_ and proxy_settings_ can be NULL. This happens when 363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // we're logged in but showing settings page is not enabled. 364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Example: supervised user creation flow where user session is active 365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // but all action happens on the login window. 366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Allowing opening proxy settigns dialog will break assumption in 367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // SystemTrayDelegateChromeOS::ChangeProxySettings(), see CHECK. 368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (settings_ || proxy_settings_) 369c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bottom_row->AddChildView(settings_ ? settings_ : proxy_settings_); 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(bottom_row); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Update UI components. 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateHeaderButtons() { 37790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (button_wifi_) 37958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UpdateTechnologyButton(button_wifi_, NetworkTypePattern::WiFi()); 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (button_mobile_) { 38158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UpdateTechnologyButton(button_mobile_, NetworkTypePattern::Mobile()); 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (proxy_settings_) 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_settings_->SetEnabled(handler->DefaultNetwork() != NULL); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<views::View*>(footer())->Layout(); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkStateListDetailedView::UpdateTechnologyButton( 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TrayPopupHeaderButton* button, 39158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const NetworkTypePattern& technology) { 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkStateHandler::TechnologyState state = 39358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkHandler::Get()->network_state_handler()->GetTechnologyState( 39458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) technology); 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (state == NetworkStateHandler::TECHNOLOGY_UNAVAILABLE) { 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetVisible(false); 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetVisible(true); 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (state == NetworkStateHandler::TECHNOLOGY_AVAILABLE) { 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetEnabled(true); 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetToggled(true); 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (state == NetworkStateHandler::TECHNOLOGY_ENABLED) { 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetEnabled(true); 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetToggled(false); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (state == NetworkStateHandler::TECHNOLOGY_ENABLING) { 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetEnabled(false); 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetToggled(false); 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { // Initializing 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetEnabled(false); 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) button->SetToggled(true); 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateNetworkList() { 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_list_view_.UpdateNetworkList(); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::OrderChild(views::View* view, int index) { 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (scroll_content()->child_at(index) != view) { 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->ReorderChildView(view, index); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateNetworkExtra() { 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_LOCKED) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) View* layout_parent = NULL; // All these buttons have the same parent. 43290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (other_wifi_) { 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(turn_on_wifi_); 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkStateHandler::TechnologyState state = 43658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->GetTechnologyState(NetworkTypePattern::WiFi()); 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (state == NetworkStateHandler::TECHNOLOGY_UNAVAILABLE) { 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_->SetVisible(false); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_->SetVisible(false); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (state == NetworkStateHandler::TECHNOLOGY_AVAILABLE) { 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) turn_on_wifi_->SetVisible(true); 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) turn_on_wifi_->SetEnabled(true); 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) other_wifi_->SetVisible(false); 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (state == NetworkStateHandler::TECHNOLOGY_ENABLED) { 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) turn_on_wifi_->SetVisible(false); 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) other_wifi_->SetVisible(true); 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initializing or Enabling 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) turn_on_wifi_->SetVisible(true); 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) turn_on_wifi_->SetEnabled(false); 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) other_wifi_->SetVisible(false); 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_parent = other_wifi_->parent(); 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (other_mobile_) { 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_other_mobile = false; 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetworkStateHandler::TechnologyState state = 46158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->GetTechnologyState(NetworkTypePattern::Mobile()); 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (state != NetworkStateHandler::TECHNOLOGY_UNAVAILABLE) { 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::DeviceState* device = 46458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->GetDeviceStateByType(NetworkTypePattern::Mobile()); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_other_mobile = (device && device->support_network_scan()); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (show_other_mobile) { 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_->SetVisible(true); 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_->SetEnabled( 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) state == NetworkStateHandler::TECHNOLOGY_ENABLED); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_->SetVisible(false); 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!layout_parent) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_parent = other_wifi_->parent(); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layout_parent) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_parent->Layout(); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateSettingsEntry() { 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 484c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool show_settings = ash::Shell::GetInstance()-> 485c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch system_tray_delegate()->ShouldShowSettings(); 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ != user::LOGGED_IN_NONE) { 487c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Allow user access settings only if user is logged in 488c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // and showing settings is allowed. There're situations (supervised user 489c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // creation flow) when session is started but UI flow continues within 490c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // login UI i.e. no browser window is yet avaialable. 491c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (show_settings) { 492c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch settings_ = new TrayPopupLabelButton( 493c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_SETTINGS)); 494c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 495c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 496c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Allow users to change proxy settings only when not logged in. 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_settings_ = new TrayPopupLabelButton( 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_PROXY_SETTINGS)); 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ToggleInfoBubble() { 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (ResetInfoBubble()) 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) info_bubble_ = new InfoBubble( 5084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) info_icon_, CreateNetworkInfoView(), this); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BubbleDelegateView::CreateBubble(info_bubble_)->Show(); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::ResetInfoBubble() { 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!info_bubble_) 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_->GetWidget()->Close(); 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_ = NULL; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void NetworkStateListDetailedView::OnInfoBubbleDestroyed() { 5214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) info_bubble_ = NULL; 5224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::View* NetworkStateListDetailedView::CreateNetworkInfoView() { 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 52690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ip_address("0.0.0.0"); 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network = handler->DefaultNetwork(); 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (network) 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ip_address = network->ip_address(); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* container = new views::View; 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->SetLayoutManager( 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); 5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container->SetBorder(views::Border::CreateEmptyBorder(0, 5, 0, 5)); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ethernet_address, wifi_address, vpn_address; 5397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (list_type_ != LIST_TYPE_VPN) { 54058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ethernet_address = handler->FormattedHardwareAddressForType( 54158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkTypePattern::Ethernet()); 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wifi_address = 54358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->FormattedHardwareAddressForType(NetworkTypePattern::WiFi()); 5447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) vpn_address = 54658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->FormattedHardwareAddressForType(NetworkTypePattern::VPN()); 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ip_address.empty()) { 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_IP), ip_address)); 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ethernet_address.empty()) { 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_ETHERNET), ethernet_address)); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!wifi_address.empty()) { 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_WIFI), wifi_address)); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!vpn_address.empty()) { 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_VPN), vpn_address)); 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Avoid an empty bubble in the unlikely event that there is no network 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // information at all. 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!container->has_children()) { 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLabel(bundle.GetLocalizedString( 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NO_NETWORKS))); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return container; 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkStateListDetailedView::CallRequestScan() { 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(1) << "Requesting Network Scan."; 57890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NetworkHandler::Get()->network_state_handler()->RequestScan(); 579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Periodically request a scan while this UI is open. 580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoopForUI::current()->PostDelayedTask( 581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FROM_HERE, 582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&NetworkStateListDetailedView::CallRequestScan, AsWeakPtr()), 583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::TimeDelta::FromSeconds(kRequestScanDelaySeconds)); 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkStateListDetailedView::ToggleMobile() { 58790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enabled = 58958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyEnabled(NetworkTypePattern::Mobile()); 59058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ash::network_connect::SetTechnologyEnabled(NetworkTypePattern::Mobile(), 59158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) !enabled); 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* NetworkStateListDetailedView::CreateViewForNetwork( 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ui::NetworkInfo& info) { 5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::Font::FontStyle font = 5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) info.highlight ? gfx::Font::BOLD : gfx::Font::NORMAL; 5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HoverHighlightView* view = new HoverHighlightView(this); 5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view->AddIconAndLabel(info.image, info.label, font); 6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view->SetBorder( 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Border::CreateEmptyBorder(0, kTrayPopupPaddingHorizontal, 0, 0)); 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return view; 6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool NetworkStateListDetailedView::IsViewHovered(views::View* view) { 6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return static_cast<HoverHighlightView*>(view)->hover(); 6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)NetworkTypePattern NetworkStateListDetailedView::GetNetworkTypePattern() const { 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return list_type_ == LIST_TYPE_VPN ? NetworkTypePattern::VPN() 6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : NetworkTypePattern::NonVirtual(); 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void NetworkStateListDetailedView::UpdateViewForNetwork( 6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::View* view, 6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const NetworkInfo& info) { 6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::Font::FontStyle font = 6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) info.highlight ? gfx::Font::BOLD : gfx::Font::NORMAL; 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HoverHighlightView* highlight = static_cast<HoverHighlightView*>(view); 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) highlight->AddIconAndLabel(info.image, info.label, font); 6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::Label* NetworkStateListDetailedView::CreateInfoLabel() { 6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Label* label = new views::Label(); 6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) label->SetBorder( 6265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Border::CreateEmptyBorder(ash::kTrayPopupPaddingBetweenItems, 6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ash::kTrayPopupPaddingHorizontal, 6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ash::kTrayPopupPaddingBetweenItems, 6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0)); 6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) label->SetEnabledColor(SkColorSetARGB(192, 0, 0, 0)); 6325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return label; 6335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void NetworkStateListDetailedView::RelayoutScrollList() { 6365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scroller()->Layout(); 6375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace tray 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash 641