network_state_list_detailed_view.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/root_window_controller.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell_window_ids.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_icon.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_icon_animation.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/tray_network_state_observer.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/fixed_sized_scroll_view.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/hover_highlight_view.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_constants.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/tray_details_view.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/utf_string_conversions.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/device_state.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_configuration_handler.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state_handler.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/ash_resources.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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/aura/window.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/bubble/bubble_delegate.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/label.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/layout/box_layout.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/layout/fill_layout.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::NetworkState; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::NetworkStateHandler; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace internal { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace tray { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Height of the list of networks in the popup. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kNetworkListHeight = 203; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Create a label with the font size and color used in the network info bubble. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::Label* CreateInfoBubbleLabel(const string16& text) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Label* label = new views::Label(text); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label->SetFont(rb.GetFont(ui::ResourceBundle::SmallFont)); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label->SetEnabledColor(SkColorSetARGB(127, 0, 0, 0)); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return label; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Create a label formatted for info items in the menu 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::Label* CreateMenuInfoLabel(const string16& text) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Label* label = new views::Label(text); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label->set_border(views::Border::CreateEmptyBorder( 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::kTrayPopupPaddingBetweenItems, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::kTrayPopupPaddingHorizontal, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::kTrayPopupPaddingBetweenItems, 0)); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) label->SetEnabledColor(SkColorSetARGB(192, 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. 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::View* CreateInfoBubbleLine(const 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)); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->AddChildView(CreateInfoBubbleLabel(UTF8ToUTF16(": "))); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->AddChildView(CreateInfoBubbleLabel(UTF8ToUTF16(text_string))); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A bubble that cannot be activated. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NonActivatableSettingsBubble : public views::BubbleDelegateView { 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NonActivatableSettingsBubble(views::View* anchor, views::View* content) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_RIGHT) { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_use_focusless(true); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_parent_window(ash::Shell::GetContainer( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) anchor->GetWidget()->GetNativeWindow()->GetRootWindow(), 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::internal::kShellWindowId_SettingBubbleContainer)); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetLayoutManager(new views::FillLayout()); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(content); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NonActivatableSettingsBubble() {} 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CanActivate() const OVERRIDE { return false; } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NonActivatableSettingsBubble); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct NetworkInfo { 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkInfo(const std::string& path) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : service_path(path), 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) disable(false), 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) highlight(false) { 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string service_path; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 label; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ImageSkia image; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool disable; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool highlight; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//------------------------------------------------------------------------------ 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// NetworkStateListDetailedView 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkStateListDetailedView::NetworkStateListDetailedView( 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SystemTrayItem* owner, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ListType list_type, 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user::LoginStatus login) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : NetworkDetailedView(owner), 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) list_type_(list_type), 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) login_(login), 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_(NULL), 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_(NULL), 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_(NULL), 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_mobile_account_(NULL), 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setup_mobile_account_(NULL), 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_(NULL), 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_(NULL), 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_(NULL), 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_vpn_(NULL), 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings_(NULL), 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_settings_(NULL), 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scanning_view_(NULL), 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) no_wifi_networks_view_(NULL), 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) no_cellular_networks_view_(NULL), 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_(NULL) { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkStateListDetailedView::~NetworkStateListDetailedView() { 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (info_bubble_) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_->GetWidget()->CloseNow(); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ManagerChanged() { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateHeaderButtons(); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateMobileAccount(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkExtra(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::NetworkListChanged() { 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateList network_list; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::Get()->GetNetworkList(&network_list); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworks(network_list); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateHeaderButtons(); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateMobileAccount(); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkExtra(); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::NetworkServiceChanged( 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network) { 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::NetworkIconChanged() { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layout(); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Overridden from NetworkDetailedView: 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::Init() { 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateScrollableList(); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateNetworkExtra(); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateHeaderEntry(); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateHeaderButtons(); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateMobileAccount(); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateList network_list; 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->RequestScan(); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->GetNetworkList(&network_list); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworks(network_list); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkList(); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateHeaderButtons(); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateMobileAccount(); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateNetworkExtra(); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkDetailedView::DetailedViewType 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkStateListDetailedView::GetViewType() const { 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return STATE_LIST_VIEW; 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Views overrides 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ButtonPressed(views::Button* sender, 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Event& event) { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == info_icon_) { 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ToggleInfoBubble(); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the info bubble was visible, close it when some other item is clicked. 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResetInfoBubble(); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::SystemTrayDelegate* delegate = 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate(); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == button_wifi_) { 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool enabled = handler->TechnologyEnabled(flimflam::kTypeWifi); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->SetTechnologyEnabled( 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeWifi, !enabled, 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::network_handler::ErrorCallback()); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == turn_on_wifi_) { 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->SetTechnologyEnabled( 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flimflam::kTypeWifi, true, 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::network_handler::ErrorCallback()); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == button_mobile_) { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO: This needs to be fixed to use 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NetworkStateHandler::SetTechnologyEnabled instead. Currently 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ToggleMobile has code to handle the locked SIM case, which cannot 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be moved here yet due to dependencies on src/chrome/* - see, 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // crbug.com/222540. 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleMobile(); 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == settings_) { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ShowNetworkSettings(); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == proxy_settings_) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ChangeProxySettings(); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == other_mobile_) { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ShowOtherCellular(); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == other_wifi_) { 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ShowOtherWifi(); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == other_vpn_) { 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ShowOtherVPN(); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::OnViewClicked(views::View* sender) { 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the info bubble was visible, close it when some other item is clicked. 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResetInfoBubble(); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == footer()->content()) { 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RootWindowController::ForWindow(GetWidget()->GetNativeView())-> 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetSystemTray()->ShowDefaultView(BUBBLE_USE_EXISTING); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_LOCKED) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::SystemTrayDelegate* delegate = 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate(); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == view_mobile_account_) { 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ShowCellularURL(topup_url_); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (sender == setup_mobile_account_) { 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ShowCellularURL(setup_url_); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<views::View*, std::string>::iterator found = 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_map_.find(sender); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (found != network_map_.end()) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConnectToNetwork(found->second); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Create UI components. 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateHeaderEntry() { 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSpecialRow(IDS_ASH_STATUS_TRAY_NETWORK, this); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateHeaderButtons() { 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_type_ == LIST_TYPE_NETWORK) { 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_ = new TrayPopupHeaderButton( 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_ENABLED, 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_DISABLED, 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_ENABLED_HOVER, 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_WIFI_DISABLED_HOVER, 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_WIFI); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_->SetTooltipText( 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISABLE_WIFI)); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_->SetToggledTooltipText( 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ENABLE_WIFI)); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) footer()->AddButton(button_wifi_); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_ = new TrayPopupHeaderButton( 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_ENABLED, 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_DISABLED, 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_ENABLED_HOVER, 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_CELLULAR_DISABLED_HOVER, 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_CELLULAR); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_->SetTooltipText( 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISABLE_MOBILE)); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_->SetToggledTooltipText( 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ENABLE_MOBILE)); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) footer()->AddButton(button_mobile_); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_ = new TrayPopupHeaderButton( 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO, 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO, 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO_HOVER, 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_AURA_UBER_TRAY_NETWORK_INFO_HOVER, 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_INFO); 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_->SetTooltipText( 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_INFO)); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) footer()->AddButton(info_icon_); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateMobileAccount() { 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_type_ != LIST_TYPE_NETWORK) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HoverHighlightView* container = new HoverHighlightView(this); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddLabel( 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle::GetSharedInstance(). 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetLocalizedString(IDS_ASH_STATUS_TRAY_MOBILE_VIEW_ACCOUNT), 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Font::NORMAL); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(container); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_mobile_account_ = container; 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container = new HoverHighlightView(this); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddLabel(ui::ResourceBundle::GetSharedInstance(). 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetLocalizedString(IDS_ASH_STATUS_TRAY_SETUP_MOBILE), 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Font::NORMAL); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(container); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setup_mobile_account_ = container; 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateNetworkExtra() { 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_LOCKED) 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* bottom_row = new views::View(); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BoxLayout* layout = new views::BoxLayout( 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BoxLayout::kHorizontal, 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayMenuBottomRowPadding, 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayMenuBottomRowPadding, 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kTrayMenuBottomRowPaddingBetweenItems); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->set_spread_blank_space(true); 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->SetLayoutManager(layout); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_type_ == LIST_TYPE_NETWORK) { 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_ = new TrayPopupLabelButton( 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_OTHER_WIFI)); 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(other_wifi_); 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_ = new TrayPopupLabelButton( 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_TURN_ON_WIFI)); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(turn_on_wifi_); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_ = new TrayPopupLabelButton( 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_OTHER_MOBILE)); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(other_mobile_); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (list_type_ == LIST_TYPE_VPN) { 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_vpn_ = new TrayPopupLabelButton( 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle::GetSharedInstance().GetLocalizedString( 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_OTHER_VPN)); 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(other_vpn_); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSettingsEntry(); 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(settings_ || proxy_settings_); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_row->AddChildView(settings_ ? settings_ : proxy_settings_); 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(bottom_row); 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Update UI components. 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateHeaderButtons() { 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (button_wifi_) { 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_wifi_->SetToggled( 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !handler->TechnologyEnabled(flimflam::kTypeWifi)); 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (button_mobile_) { 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_->SetToggled(!handler->TechnologyEnabled( 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::kMatchTypeMobile)); 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button_mobile_->SetVisible(handler->TechnologyAvailable( 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler::kMatchTypeMobile)); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (proxy_settings_) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_settings_->SetEnabled(handler->DefaultNetwork() != NULL); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<views::View*>(footer())->Layout(); 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateNetworks( 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkStateList& networks) { 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_list_.clear(); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (NetworkStateList::const_iterator iter = networks.begin(); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter != networks.end(); ++iter) { 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network = *iter; 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ((list_type_ == LIST_TYPE_NETWORK && 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->type() != flimflam::kTypeVPN) || 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (list_type_ == LIST_TYPE_VPN && 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->type() == flimflam::kTypeVPN)) { 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkInfo* info = new NetworkInfo(network->path()); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_list_.push_back(info); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateNetworkList() { 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First, update state for all networks 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < network_list_.size(); ++i) { 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkInfo* info = network_list_[i]; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network = 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->GetNetworkState(info->service_path); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) continue; 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info->image = network_icon::GetImageForNetwork( 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network, network_icon::ICON_TYPE_LIST); 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info->label = network_icon::GetLabelForNetwork( 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network, network_icon::ICON_TYPE_LIST); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info->highlight = 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->IsConnectedState() || network->IsConnectingState(); 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info->disable = 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network->activation_state() == flimflam::kActivationStateActivating; 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the updated list entries 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_map_.clear(); 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::set<std::string> new_service_paths; 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_relayout = UpdateNetworkListEntries(&new_service_paths); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove old children 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::set<std::string> remove_service_paths; 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (ServicePathMap::const_iterator it = service_path_map_.begin(); 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it != service_path_map_.end(); ++it) { 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_service_paths.find(it->first) == new_service_paths.end()) { 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) remove_service_paths.insert(it->first); 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_map_.erase(it->second); 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->RemoveChildView(it->second); 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (std::set<std::string>::const_iterator remove_it = 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) remove_service_paths.begin(); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) remove_it != remove_service_paths.end(); ++remove_it) { 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_path_map_.erase(*remove_it); 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (needs_relayout) { 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* selected_view = NULL; 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (ServicePathMap::const_iterator iter = service_path_map_.begin(); 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter != service_path_map_.end(); ++iter) { 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (iter->second->hover()) { 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) selected_view = iter->second; 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->SizeToPreferredSize(); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<views::View*>(scroller())->Layout(); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (selected_view) 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->ScrollRectToVisible(selected_view->bounds()); 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::CreateOrUpdateInfoLabel( 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index, const string16& text, views::Label** label) { 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (*label == NULL) { 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *label = CreateMenuInfoLabel(text); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->AddChildViewAt(*label, index); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (*label)->SetText(text); 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return OrderChild(*label, index); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::UpdateNetworkChild( 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index, const NetworkInfo* info) { 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_relayout = false; 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HoverHighlightView* container = NULL; 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ServicePathMap::const_iterator found = 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_path_map_.find(info->service_path); 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Font::FontStyle font = 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info->highlight ? gfx::Font::BOLD : gfx::Font::NORMAL; 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (found == service_path_map_.end()) { 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container = new HoverHighlightView(this); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddIconAndLabel(info->image, info->label, font); 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->AddChildViewAt(container, index); 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->set_border(views::Border::CreateEmptyBorder( 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, kTrayPopupPaddingHorizontal, 0, 0)); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container = found->second; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->RemoveAllChildViews(true); 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddIconAndLabel(info->image, info->label, font); 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->Layout(); 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->SchedulePaint(); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = OrderChild(container, index); 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (info->disable) 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->SetEnabled(false); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_map_[container] = info->service_path; 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_path_map_[info->service_path] = container; 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return needs_relayout; 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::OrderChild(views::View* view, int index) { 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (scroll_content()->child_at(index) != view) { 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->ReorderChildView(view, index); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::UpdateNetworkListEntries( 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::set<std::string>* new_service_paths) { 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_relayout = false; 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Insert child views 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index = 0; 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Highlighted networks 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < network_list_.size(); ++i) { 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkInfo* info = network_list_[i]; 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (info->highlight) { 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UpdateNetworkChild(index++, info)) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_service_paths->insert(info->service_path); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_type_ == LIST_TYPE_NETWORK) { 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cellular initializing 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int status_message_id = network_icon::GetCellularUninitializedMsg(); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!status_message_id && 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->TechnologyEnabled(NetworkStateHandler::kMatchTypeMobile) && 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !handler->FirstNetworkByType(NetworkStateHandler::kMatchTypeMobile)) { 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_message_id = IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS; 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status_message_id) { 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 text = rb.GetLocalizedString(status_message_id); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (CreateOrUpdateInfoLabel(index++, text, &no_cellular_networks_view_)) 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (no_cellular_networks_view_) { 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->RemoveChildView(no_cellular_networks_view_); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) no_cellular_networks_view_ = NULL; 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "Wifi Enabled / Disabled" 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (network_list_.empty()) { 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int message_id = handler->TechnologyEnabled(flimflam::kTypeWifi) ? 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED : 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 text = rb.GetLocalizedString(message_id); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (CreateOrUpdateInfoLabel(index++, text, &no_wifi_networks_view_)) 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (no_wifi_networks_view_) { 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->RemoveChildView(no_wifi_networks_view_); 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) no_wifi_networks_view_ = NULL; 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "Wifi Scanning" 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (handler->GetScanningByType(flimflam::kTypeWifi)) { 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 text = 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_WIFI_SCANNING_MESSAGE); 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (CreateOrUpdateInfoLabel(index++, text, &scanning_view_)) 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (scanning_view_ != NULL) { 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_content()->RemoveChildView(scanning_view_); 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scanning_view_ = NULL; 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Un-highlighted networks 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < network_list_.size(); ++i) { 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkInfo* info = network_list_[i]; 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!info->highlight) { 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (UpdateNetworkChild(index++, info)) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_service_paths->insert(info->service_path); 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // No networks or other messages (fallback) 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (index == 0) { 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 text = rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NO_NETWORKS); 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (CreateOrUpdateInfoLabel(index++, text, &scanning_view_)) 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_relayout = true; 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return needs_relayout; 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateMobileAccount() { 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_type_ != LIST_TYPE_NETWORK) 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_mobile_account_->SetVisible(false); 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setup_mobile_account_->SetVisible(false); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_NONE) 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(stevenjb): Migrate this code to src/chromeos. 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string carrier_id, topup_url, setup_url; 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (Shell::GetInstance()->system_tray_delegate()-> 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCellularCarrierInfo(&carrier_id, &topup_url, &setup_url)) { 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (carrier_id != carrier_id_) { 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) carrier_id_ = carrier_id; 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!topup_url.empty()) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) topup_url_ = topup_url; 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!setup_url.empty()) 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setup_url_ = setup_url; 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!topup_url_.empty()) 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_mobile_account_->SetVisible(true); 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!setup_url_.empty()) 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setup_mobile_account_->SetVisible(true); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::UpdateNetworkExtra() { 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ == user::LOGGED_IN_LOCKED) 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) View* layout_parent = NULL; // All these buttons have the same parent. 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (other_wifi_) { 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(turn_on_wifi_); 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!handler->TechnologyAvailable(flimflam::kTypeWifi)) { 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_->SetVisible(false); 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_->SetVisible(false); 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (!handler->TechnologyEnabled(flimflam::kTypeWifi)) { 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_->SetVisible(true); 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_->SetVisible(false); 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) turn_on_wifi_->SetVisible(false); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_wifi_->SetVisible(true); 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_parent = other_wifi_->parent(); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (other_mobile_) { 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_other_mobile = false; 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (handler->TechnologyAvailable(NetworkStateHandler::kMatchTypeMobile)) { 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::DeviceState* device = 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->GetDeviceStateByType(NetworkStateHandler::kMatchTypeMobile); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_other_mobile = (device && device->support_network_scan()); 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (show_other_mobile) { 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_->SetVisible(true); 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_->SetEnabled( 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->TechnologyEnabled(NetworkStateHandler::kMatchTypeMobile)); 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) other_mobile_->SetVisible(false); 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!layout_parent) 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_parent = other_wifi_->parent(); 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layout_parent) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout_parent->Layout(); 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::CreateSettingsEntry() { 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (login_ != user::LOGGED_IN_NONE) { 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Settings, only if logged in. 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) settings_ = new TrayPopupLabelButton( 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_SETTINGS)); 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) proxy_settings_ = new TrayPopupLabelButton( 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_PROXY_SETTINGS)); 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ToggleInfoBubble() { 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (ResetInfoBubble()) 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_ = new NonActivatableSettingsBubble( 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_icon_, CreateNetworkInfoView()); 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BubbleDelegateView::CreateBubble(info_bubble_)->Show(); 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NetworkStateListDetailedView::ResetInfoBubble() { 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!info_bubble_) 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_->GetWidget()->Close(); 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info_bubble_ = NULL; 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::View* NetworkStateListDetailedView::CreateNetworkInfoView() { 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ip_address("0.0.0.0"); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network = handler->DefaultNetwork(); 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (network) 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ip_address = network->ip_address(); 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* container = new views::View; 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->SetLayoutManager( 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->set_border(views::Border::CreateEmptyBorder(0, 5, 0, 5)); 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ethernet_address, wifi_address, vpn_address; 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (list_type_ == LIST_TYPE_NETWORK) { 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ethernet_address = 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->FormattedHardwareAddressForType(flimflam::kTypeEthernet); 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wifi_address = 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->FormattedHardwareAddressForType(flimflam::kTypeWifi); 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (list_type_ == LIST_TYPE_VPN) { 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) vpn_address = 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->FormattedHardwareAddressForType(flimflam::kTypeVPN); 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GetNetworkAddresses returns empty strings if no information is available. 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ip_address.empty()) { 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_IP), ip_address)); 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ethernet_address.empty()) { 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_ETHERNET), ethernet_address)); 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!wifi_address.empty()) { 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_WIFI), wifi_address)); 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!vpn_address.empty()) { 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLine(bundle.GetLocalizedString( 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_VPN), vpn_address)); 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Avoid an empty bubble in the unlikely event that there is no network 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // information at all. 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!container->has_children()) { 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(CreateInfoBubbleLabel(bundle.GetLocalizedString( 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ASH_STATUS_TRAY_NO_NETWORKS))); 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return container; 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkStateListDetailedView::ConnectToNetwork( 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& service_path) { 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateHandler* handler = NetworkStateHandler::Get(); 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkState* network = handler->GetNetworkState(service_path); 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::switches::kUseNewNetworkConfigurationHandlers) && 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !network->IsConnectedState()) { 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->set_connecting_network(service_path); 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::NetworkConfigurationHandler::Get()->Connect( 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_path, 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&base::DoNothing), 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chromeos::network_handler::ErrorCallback()); 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This will show the settings UI for a connected network. 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(stevenjb): Change the API to explicitly show network settings. 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->system_tray_delegate()->ConnectToNetwork( 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_path); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace tray 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace internal 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash 804