Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: ui/chromeos/network/network_list_md.cc

Issue 2342793005: [ash-md] Adds Wi-Fi header row to system tray network detailed view (Closed)
Patch Set: [ash-md] Materializes system tray network detailed view Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/chromeos/network/network_list.h" 5 #include "ui/chromeos/network/network_list_md.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "chromeos/dbus/dbus_thread_manager.h" 10 #include "chromeos/dbus/dbus_thread_manager.h"
11 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" 11 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
12 #include "chromeos/dbus/power_manager_client.h" 12 #include "chromeos/dbus/power_manager_client.h"
13 #include "chromeos/login/login_state.h" 13 #include "chromeos/login/login_state.h"
14 #include "chromeos/network/managed_network_configuration_handler.h" 14 #include "chromeos/network/managed_network_configuration_handler.h"
15 #include "chromeos/network/network_state.h" 15 #include "chromeos/network/network_state.h"
16 #include "chromeos/network/network_state_handler.h" 16 #include "chromeos/network/network_state_handler.h"
17 #include "chromeos/network/network_state_handler_observer.h" 17 #include "chromeos/network/network_state_handler_observer.h"
18 #include "components/device_event_log/device_event_log.h" 18 #include "components/device_event_log/device_event_log.h"
19 #include "grit/ui_chromeos_strings.h" 19 #include "grit/ui_chromeos_strings.h"
20 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
21 #include "ui/base/resource/resource_bundle.h" 21 #include "ui/base/resource/resource_bundle.h"
22 #include "ui/chromeos/network/network_icon.h" 22 #include "ui/chromeos/network/network_icon.h"
23 #include "ui/chromeos/network/network_icon_animation.h" 23 #include "ui/chromeos/network/network_icon_animation.h"
24 #include "ui/chromeos/network/network_info.h" 24 #include "ui/chromeos/network/network_info.h"
25 #include "ui/chromeos/network/network_list_delegate.h" 25 #include "ui/chromeos/network/network_list_delegate.h"
26 #include "ui/gfx/font.h" 26 #include "ui/gfx/font.h"
27 #include "ui/gfx/paint_vector_icon.h"
28 #include "ui/gfx/vector_icons_public.h"
29 #include "ui/views/border.h"
30 #include "ui/views/controls/button/image_button.h"
31 #include "ui/views/controls/button/toggle_button.h"
27 #include "ui/views/controls/label.h" 32 #include "ui/views/controls/label.h"
33 #include "ui/views/layout/box_layout.h"
28 #include "ui/views/view.h" 34 #include "ui/views/view.h"
29 35
30 using chromeos::LoginState; 36 using chromeos::LoginState;
31 using chromeos::NetworkHandler; 37 using chromeos::NetworkHandler;
32 using chromeos::NetworkStateHandler; 38 using chromeos::NetworkStateHandler;
33 using chromeos::ManagedNetworkConfigurationHandler; 39 using chromeos::ManagedNetworkConfigurationHandler;
34 using chromeos::NetworkTypePattern; 40 using chromeos::NetworkTypePattern;
35 41
36 namespace ui { 42 namespace ui {
37 43
38 namespace { 44 namespace {
39 45
46 const int kWiFiRowHeight = 48;
47 const int kWiFiIconSize = 10;
48 const SkColor kWifiRowSeparatorColor = SkColorSetA(SK_ColorBLACK, .12f * 0xFF);
49
40 bool IsProhibitedByPolicy(const chromeos::NetworkState* network) { 50 bool IsProhibitedByPolicy(const chromeos::NetworkState* network) {
41 if (!NetworkTypePattern::WiFi().MatchesType(network->type())) 51 if (!NetworkTypePattern::WiFi().MatchesType(network->type()))
42 return false; 52 return false;
43 if (!LoginState::IsInitialized() || !LoginState::Get()->IsUserLoggedIn()) 53 if (!LoginState::IsInitialized() || !LoginState::Get()->IsUserLoggedIn())
44 return false; 54 return false;
45 ManagedNetworkConfigurationHandler* managed_configuration_handler = 55 ManagedNetworkConfigurationHandler* managed_configuration_handler =
46 NetworkHandler::Get()->managed_network_configuration_handler(); 56 NetworkHandler::Get()->managed_network_configuration_handler();
47 const base::DictionaryValue* global_network_config = 57 const base::DictionaryValue* global_network_config =
48 managed_configuration_handler->GetGlobalConfigFromPolicy( 58 managed_configuration_handler->GetGlobalConfigFromPolicy(
49 std::string() /* no username hash, device policy */); 59 std::string() /* no username hash, device policy */);
50 bool policy_prohibites_unmanaged = false; 60 bool policy_prohibites_unmanaged = false;
51 if (global_network_config) { 61 if (global_network_config) {
52 global_network_config->GetBooleanWithoutPathExpansion( 62 global_network_config->GetBooleanWithoutPathExpansion(
53 ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect, 63 ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect,
54 &policy_prohibites_unmanaged); 64 &policy_prohibites_unmanaged);
55 } 65 }
56 if (!policy_prohibites_unmanaged) 66 if (!policy_prohibites_unmanaged)
57 return false; 67 return false;
58 return !managed_configuration_handler->FindPolicyByGuidAndProfile( 68 return !managed_configuration_handler->FindPolicyByGuidAndProfile(
59 network->guid(), network->profile_path()); 69 network->guid(), network->profile_path());
60 } 70 }
61 71
62 } // namespace 72 } // namespace
63 73
64 // NetworkListView: 74 class NetworkListViewMd::WiFiHeaderRowView : public views::View {
75 public:
76 WiFiHeaderRowView(views::ButtonListener* listener, bool enabled)
77 : views::View(),
78 listener_(listener),
79 enabled_(enabled),
80 label_(nullptr),
81 toggle_(nullptr),
82 join_(nullptr) {
83 Init();
84 }
65 85
66 NetworkListView::NetworkListView(NetworkListDelegate* delegate) 86 ~WiFiHeaderRowView() override {}
87
88 void Init() {
89 SetBorder(views::Border::CreateSolidSidedBorder(1, 0, 0, 0,
tdanderson 2016/09/20 14:44:33 Can you add a TODO(tdanderson) to eventually unify
varkha 2016/09/23 00:35:53 Done.
90 kWifiRowSeparatorColor));
91 views::View* container = new views::View;
92 container->SetBorder(views::Border::CreateEmptyBorder(4, 18, 4, 10));
varkha 2016/09/19 20:19:23 [self review] Need to move those constants above o
varkha 2016/09/23 00:35:53 Done.
93 views::BoxLayout* layout1 =
94 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0);
95 SetLayoutManager(layout1);
96 AddChildView(container);
97 layout1->SetFlexForView(container, 1);
98
99 views::BoxLayout* layout =
100 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 8, 28);
101 container->SetLayoutManager(layout);
102 SkColor color = GetNativeTheme()->GetSystemColor(
103 ui::NativeTheme::kColorId_CallToActionColor);
104 label_ = new views::Label;
105 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
106 base::string16 text =
107 rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_NETWORK_WIFI);
108 label_->SetText(text);
109 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
110 label_->SetEnabledColor(color);
111 label_->SetFontList(rb.GetFontList(ui::ResourceBundle::BoldFont));
tdanderson 2016/09/20 14:44:33 Try using TrayPopupItemStyle to set the font style
varkha 2016/09/23 00:35:53 I can't - it is in ash and I cannot use ash here.
112 container->AddChildView(label_);
113 layout->SetFlexForView(label_, 1);
114
115 join_ = new views::ImageButton(listener_);
116 join_image_ = network_icon::GetImageForHeaderWifiNetwork(
117 SkColorSetA(color, 0xFF / 2));
118 join_image_pressed_ = network_icon::GetImageForHeaderWifiNetwork(color);
119 join_->SetImage(views::CustomButton::STATE_NORMAL, &join_image_);
120 join_->SetImage(views::CustomButton::STATE_HOVERED, &join_image_pressed_);
121 join_->SetImage(views::CustomButton::STATE_PRESSED, &join_image_pressed_);
122 join_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
123 views::ImageButton::ALIGN_MIDDLE);
124 join_->SetMinimumImageSize(gfx::Size(kWiFiIconSize, kWiFiIconSize));
125 container->AddChildView(join_);
126
127 toggle_ = new views::ToggleButton(listener_);
128 container->AddChildView(toggle_);
129 SetEnabled(enabled_);
130 }
131
132 void SetEnabled(bool enabled) {
133 enabled_ = enabled;
134 join_->SetVisible(enabled_);
135 toggle_->SetIsOn(enabled_, true);
136 }
137
138 const views::Button* toggle() const { return toggle_; }
139 const views::Button* join() const { return join_; }
140 bool is_toggled() const { return toggle_->is_on(); }
141
142 // views::View:
143 gfx::Size GetPreferredSize() const override {
144 gfx::Size size = views::View::GetPreferredSize();
145 size.set_height(kWiFiRowHeight);
146 return size;
147 }
148
149 int GetHeightForWidth(int width) const override { return kWiFiRowHeight; }
150
151 void Layout() override {
152 views::View::Layout();
153 toggle_->SizeToPreferredSize();
154 }
155
156 private:
157 views::ButtonListener* listener_;
158 bool enabled_;
159 views::Label* label_;
160 views::ToggleButton* toggle_;
161 views::ImageButton* join_;
162 gfx::ImageSkia join_image_;
163 gfx::ImageSkia join_image_pressed_;
164
165 DISALLOW_COPY_AND_ASSIGN(WiFiHeaderRowView);
166 };
167
168 // NetworkListViewMd:
169
170 NetworkListViewMd::NetworkListViewMd(NetworkListDelegate* delegate)
67 : delegate_(delegate), 171 : delegate_(delegate),
68 no_wifi_networks_view_(NULL), 172 no_wifi_networks_view_(nullptr),
69 no_cellular_networks_view_(NULL) { 173 no_cellular_networks_view_(nullptr),
174 wifi_header_view_(nullptr) {
70 CHECK(delegate_); 175 CHECK(delegate_);
71 } 176 }
72 177
73 NetworkListView::~NetworkListView() { 178 NetworkListViewMd::~NetworkListViewMd() {
74 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 179 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
75 } 180 }
76 181
77 void NetworkListView::Update() { 182 void NetworkListViewMd::Update() {
78 CHECK(container_); 183 CHECK(container_);
79 NetworkStateHandler::NetworkStateList network_list; 184 NetworkStateHandler::NetworkStateList network_list;
80 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 185 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
81 handler->GetVisibleNetworkList(&network_list); 186 handler->GetVisibleNetworkList(&network_list);
82 UpdateNetworks(network_list); 187 UpdateNetworks(network_list);
188 OrderNetworks();
83 UpdateNetworkIcons(); 189 UpdateNetworkIcons();
84 UpdateNetworkListInternal(); 190 UpdateNetworkListInternal();
85 } 191 }
86 192
87 bool NetworkListView::IsNetworkEntry(views::View* view, 193 bool NetworkListViewMd::IsNetworkEntry(views::View* view,
88 std::string* service_path) const { 194 std::string* service_path) const {
89 std::map<views::View*, std::string>::const_iterator found = 195 std::map<views::View*, std::string>::const_iterator found =
90 network_map_.find(view); 196 network_map_.find(view);
91 if (found == network_map_.end()) 197 if (found == network_map_.end())
92 return false; 198 return false;
93 *service_path = found->second; 199 *service_path = found->second;
94 return true; 200 return true;
95 } 201 }
96 202
97 void NetworkListView::UpdateNetworks( 203 void NetworkListViewMd::UpdateNetworks(
98 const NetworkStateHandler::NetworkStateList& networks) { 204 const NetworkStateHandler::NetworkStateList& networks) {
99 SCOPED_NET_LOG_IF_SLOW(); 205 SCOPED_NET_LOG_IF_SLOW();
100 network_list_.clear(); 206 network_list_.clear();
101 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern(); 207 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern();
102 for (NetworkStateHandler::NetworkStateList::const_iterator iter = 208 for (NetworkStateHandler::NetworkStateList::const_iterator iter =
103 networks.begin(); 209 networks.begin();
104 iter != networks.end(); 210 iter != networks.end(); ++iter) {
105 ++iter) {
106 const chromeos::NetworkState* network = *iter; 211 const chromeos::NetworkState* network = *iter;
107 if (!pattern.MatchesType(network->type())) 212 if (!pattern.MatchesType(network->type()))
108 continue; 213 continue;
109 network_list_.push_back(base::MakeUnique<NetworkInfo>(network->path())); 214 network_list_.push_back(base::MakeUnique<NetworkInfo>(network->path()));
110 } 215 }
111 } 216 }
112 217
113 void NetworkListView::UpdateNetworkIcons() { 218 void NetworkListViewMd::OrderNetworks() {
219 struct CompareNetwork {
220 explicit CompareNetwork(NetworkStateHandler* handler) : handler_(handler) {}
221
222 // Returns true if |network1| is less than (i.e. is ordered before)
223 // |network2|.
224 bool operator()(const std::unique_ptr<NetworkInfo>& network1,
225 const std::unique_ptr<NetworkInfo>& network2) {
226 int order1 = GetOrder(handler_->GetNetworkState(network1->service_path));
227 int order2 = GetOrder(handler_->GetNetworkState(network2->service_path));
228 const bool above =
229 (order1 < order2) ||
230 (order1 == order2 && network1->highlight && !network2->highlight) ||
231 (order1 == order2 &&
232 network1->service_path.compare(network2->service_path) < 0);
233 return above;
234 }
235
236 private:
237 static int GetOrder(const chromeos::NetworkState* network) {
238 if (!network)
239 return 999;
240 if (network->Matches(NetworkTypePattern::Ethernet()))
241 return 0;
242 if (network->Matches(NetworkTypePattern::Cellular()))
243 return 1;
244 if (network->Matches(NetworkTypePattern::Mobile()))
245 return 2;
246 if (network->Matches(NetworkTypePattern::WiFi()))
247 return 3;
248 return 4;
249 }
250
251 NetworkStateHandler* handler_;
252 };
253 std::sort(network_list_.begin(), network_list_.end(),
254 CompareNetwork(NetworkHandler::Get()->network_state_handler()));
255 }
256
257 void NetworkListViewMd::UpdateNetworkIcons() {
114 SCOPED_NET_LOG_IF_SLOW(); 258 SCOPED_NET_LOG_IF_SLOW();
115 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 259 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
116 260
117 // First, update state for all networks 261 // First, update state for all networks
118 bool animating = false; 262 bool animating = false;
119 263
120 for (auto& info : network_list_) { 264 for (auto& info : network_list_) {
121 const chromeos::NetworkState* network = 265 const chromeos::NetworkState* network =
122 handler->GetNetworkState(info->service_path); 266 handler->GetNetworkState(info->service_path);
123 if (!network) 267 if (!network)
124 continue; 268 continue;
125 bool prohibited_by_policy = IsProhibitedByPolicy(network); 269 bool prohibited_by_policy = IsProhibitedByPolicy(network);
270 info->label =
271 network_icon::GetLabelForNetwork(network, network_icon::ICON_TYPE_LIST);
126 info->image = 272 info->image =
127 network_icon::GetImageForNetwork(network, network_icon::ICON_TYPE_LIST); 273 network_icon::GetImageForNetwork(network, network_icon::ICON_TYPE_LIST);
128 info->label =
129 network_icon::GetLabelForNetwork(network, network_icon::ICON_TYPE_LIST);
130 info->highlight =
131 network->IsConnectedState() || network->IsConnectingState();
132 info->disable = 274 info->disable =
133 (network->activation_state() == shill::kActivationStateActivating) || 275 (network->activation_state() == shill::kActivationStateActivating) ||
134 prohibited_by_policy; 276 prohibited_by_policy;
277 info->highlight =
278 network->IsConnectedState() || network->IsConnectingState();
279 info->wifi = network->Matches(NetworkTypePattern::WiFi());
135 if (prohibited_by_policy) { 280 if (prohibited_by_policy) {
136 info->tooltip = 281 info->tooltip =
137 l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_PROHIBITED); 282 l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_PROHIBITED);
138 } 283 }
139 if (!animating && network->IsConnectingState()) 284 if (!animating && network->IsConnectingState())
140 animating = true; 285 animating = true;
141 } 286 }
142 if (animating) 287 if (animating)
143 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); 288 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this);
144 else 289 else
145 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); 290 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this);
146 } 291 }
147 292
148 void NetworkListView::UpdateNetworkListInternal() { 293 void NetworkListViewMd::UpdateNetworkListInternal() {
149 SCOPED_NET_LOG_IF_SLOW(); 294 SCOPED_NET_LOG_IF_SLOW();
150 // Get the updated list entries 295 // Get the updated list entries
151 network_map_.clear(); 296 network_map_.clear();
152 std::set<std::string> new_service_paths; 297 std::set<std::string> new_service_paths;
153 bool needs_relayout = UpdateNetworkListEntries(&new_service_paths); 298 bool needs_relayout = UpdateNetworkListEntries(&new_service_paths);
154 299
155 // Remove old children 300 // Remove old children
156 std::set<std::string> remove_service_paths; 301 std::set<std::string> remove_service_paths;
157 for (ServicePathMap::const_iterator it = service_path_map_.begin(); 302 for (ServicePathMap::const_iterator it = service_path_map_.begin();
158 it != service_path_map_.end(); 303 it != service_path_map_.end(); ++it) {
159 ++it) {
160 if (new_service_paths.find(it->first) == new_service_paths.end()) { 304 if (new_service_paths.find(it->first) == new_service_paths.end()) {
161 remove_service_paths.insert(it->first); 305 remove_service_paths.insert(it->first);
162 network_map_.erase(it->second); 306 network_map_.erase(it->second);
163 container_->RemoveChildView(it->second); 307 container_->RemoveChildView(it->second);
164 needs_relayout = true; 308 needs_relayout = true;
165 } 309 }
166 } 310 }
167 311
168 for (std::set<std::string>::const_iterator remove_it = 312 for (std::set<std::string>::const_iterator remove_it =
169 remove_service_paths.begin(); 313 remove_service_paths.begin();
170 remove_it != remove_service_paths.end(); 314 remove_it != remove_service_paths.end(); ++remove_it) {
171 ++remove_it) {
172 service_path_map_.erase(*remove_it); 315 service_path_map_.erase(*remove_it);
173 } 316 }
174 317
175 if (needs_relayout) 318 if (needs_relayout)
176 HandleRelayout(); 319 HandleRelayout();
177 } 320 }
178 321
179 void NetworkListView::HandleRelayout() { 322 void NetworkListViewMd::HandleRelayout() {
180 views::View* selected_view = NULL; 323 views::View* selected_view = nullptr;
181 for (auto& iter : service_path_map_) { 324 for (auto& iter : service_path_map_) {
182 if (delegate_->IsViewHovered(iter.second)) { 325 if (delegate_->IsViewHovered(iter.second)) {
183 selected_view = iter.second; 326 selected_view = iter.second;
184 break; 327 break;
185 } 328 }
186 } 329 }
187 container_->SizeToPreferredSize(); 330 container_->SizeToPreferredSize();
188 delegate_->RelayoutScrollList(); 331 delegate_->RelayoutScrollList();
189 if (selected_view) 332 if (selected_view)
190 container_->ScrollRectToVisible(selected_view->bounds()); 333 container_->ScrollRectToVisible(selected_view->bounds());
191 } 334 }
192 335
193 bool NetworkListView::UpdateNetworkListEntries( 336 bool NetworkListViewMd::UpdateNetworkListEntries(
194 std::set<std::string>* new_service_paths) { 337 std::set<std::string>* new_service_paths) {
195 bool needs_relayout = false; 338 bool needs_relayout = false;
196 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 339 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
197 340
198 // Insert child views 341 // Insert child views
199 int index = 0; 342 int index = 0;
200 343
201 // Highlighted networks 344 // High-priority networks (not Wi-Fi)
202 needs_relayout |= 345 needs_relayout |=
203 UpdateNetworkChildren(new_service_paths, &index, true /* highlighted */); 346 UpdateNetworkChildren(new_service_paths, &index, false /* not Wi-Fi */);
204 347
205 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern(); 348 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern();
206 if (pattern.MatchesPattern(NetworkTypePattern::Cellular())) { 349 if (pattern.MatchesPattern(NetworkTypePattern::Cellular())) {
207 // Cellular initializing 350 // Cellular initializing
208 int message_id = network_icon::GetCellularUninitializedMsg(); 351 int message_id = network_icon::GetCellularUninitializedMsg();
209 if (!message_id && 352 if (!message_id &&
210 handler->IsTechnologyEnabled(NetworkTypePattern::Mobile()) && 353 handler->IsTechnologyEnabled(NetworkTypePattern::Mobile()) &&
211 !handler->FirstNetworkByType(NetworkTypePattern::Mobile())) { 354 !handler->FirstNetworkByType(NetworkTypePattern::Mobile())) {
212 message_id = IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS; 355 message_id = IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS;
213 } 356 }
214 needs_relayout |= 357 needs_relayout |=
215 UpdateInfoLabel(message_id, index, &no_cellular_networks_view_); 358 UpdateInfoLabel(message_id, index, &no_cellular_networks_view_);
216 359
217 if (message_id) 360 if (message_id)
218 ++index; 361 ++index;
219 } 362 }
220 363
221 if (pattern.MatchesPattern(NetworkTypePattern::WiFi())) { 364 if (pattern.MatchesPattern(NetworkTypePattern::WiFi())) {
365 needs_relayout |= UpdateWiFiHeaderRow(
366 handler->IsTechnologyEnabled(NetworkTypePattern::WiFi()), index,
367 &wifi_header_view_);
368 ++index;
369
222 // "Wifi Enabled / Disabled" 370 // "Wifi Enabled / Disabled"
223 int message_id = 0; 371 int message_id = 0;
224 if (network_list_.empty()) { 372 if (network_list_.empty()) {
225 message_id = handler->IsTechnologyEnabled(NetworkTypePattern::WiFi()) 373 message_id = handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())
226 ? IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED 374 ? IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED
227 : IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; 375 : IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED;
228 } 376 }
229 needs_relayout |= 377 needs_relayout |=
230 UpdateInfoLabel(message_id, index, &no_wifi_networks_view_); 378 UpdateInfoLabel(message_id, index, &no_wifi_networks_view_);
231 if (message_id) 379 if (message_id)
232 ++index; 380 ++index;
381
382 // Wi-Fi networks
383 needs_relayout |=
384 UpdateNetworkChildren(new_service_paths, &index, true /* Wi-Fi */);
233 } 385 }
234 386
235 // Un-highlighted networks
236 needs_relayout |= UpdateNetworkChildren(new_service_paths, &index,
237 false /* not highlighted */);
238
239 // No networks or other messages (fallback) 387 // No networks or other messages (fallback)
240 if (index == 0) { 388 if (index == 0) {
241 needs_relayout |= UpdateInfoLabel(IDS_ASH_STATUS_TRAY_NO_NETWORKS, index, 389 needs_relayout |= UpdateInfoLabel(IDS_ASH_STATUS_TRAY_NO_NETWORKS, index,
242 &no_wifi_networks_view_); 390 &no_wifi_networks_view_);
243 } 391 }
244 392
245 return needs_relayout; 393 return needs_relayout;
246 } 394 }
247 395
248 bool NetworkListView::UpdateNetworkChildren( 396 bool NetworkListViewMd::UpdateNetworkChildren(
249 std::set<std::string>* new_service_paths, 397 std::set<std::string>* new_service_paths,
250 int* child_index, 398 int* child_index,
251 bool highlighted) { 399 bool wifi) {
252 bool needs_relayout = false; 400 bool needs_relayout = false;
253 int index = *child_index; 401 int index = *child_index;
254 for (auto& info : network_list_) { 402 for (auto& info : network_list_) {
255 if (info->highlight != highlighted) 403 if (info->wifi != wifi)
256 continue; 404 continue;
257 needs_relayout |= UpdateNetworkChild(index++, info.get()); 405 needs_relayout |= UpdateNetworkChild(index++, info.get());
258 new_service_paths->insert(info->service_path); 406 new_service_paths->insert(info->service_path);
259 } 407 }
260 *child_index = index; 408 *child_index = index;
261 return needs_relayout; 409 return needs_relayout;
262 } 410 }
263 411
264 bool NetworkListView::UpdateNetworkChild(int index, const NetworkInfo* info) { 412 bool NetworkListViewMd::UpdateNetworkChild(int index, const NetworkInfo* info) {
265 bool needs_relayout = false; 413 bool needs_relayout = false;
266 views::View* container = NULL; 414 views::View* container = nullptr;
267 ServicePathMap::const_iterator found = 415 ServicePathMap::const_iterator found =
268 service_path_map_.find(info->service_path); 416 service_path_map_.find(info->service_path);
269 if (found == service_path_map_.end()) { 417 if (found == service_path_map_.end()) {
270 container = delegate_->CreateViewForNetwork(*info); 418 container = delegate_->CreateViewForNetwork(*info);
271 container_->AddChildViewAt(container, index); 419 container_->AddChildViewAt(container, index);
272 needs_relayout = true; 420 needs_relayout = true;
273 } else { 421 } else {
274 container = found->second; 422 container = found->second;
275 container->RemoveAllChildViews(true); 423 container->RemoveAllChildViews(true);
276 delegate_->UpdateViewForNetwork(container, *info); 424 delegate_->UpdateViewForNetwork(container, *info);
277 container->Layout(); 425 container->Layout();
278 container->SchedulePaint(); 426 container->SchedulePaint();
279 needs_relayout = PlaceViewAtIndex(container, index); 427 needs_relayout = PlaceViewAtIndex(container, index);
280 } 428 }
281 if (info->disable) 429 if (info->disable)
282 container->SetEnabled(false); 430 container->SetEnabled(false);
283 network_map_[container] = info->service_path; 431 network_map_[container] = info->service_path;
284 service_path_map_[info->service_path] = container; 432 service_path_map_[info->service_path] = container;
285 return needs_relayout; 433 return needs_relayout;
286 } 434 }
287 435
288 bool NetworkListView::PlaceViewAtIndex(views::View* view, int index) { 436 bool NetworkListViewMd::PlaceViewAtIndex(views::View* view, int index) {
289 if (container_->child_at(index) == view) 437 if (container_->child_at(index) == view)
290 return false; 438 return false;
291 container_->ReorderChildView(view, index); 439 container_->ReorderChildView(view, index);
292 return true; 440 return true;
293 } 441 }
294 442
295 bool NetworkListView::UpdateInfoLabel(int message_id, 443 bool NetworkListViewMd::UpdateInfoLabel(int message_id,
296 int index, 444 int index,
297 views::Label** label) { 445 views::Label** label) {
298 CHECK(label); 446 CHECK(label);
299 bool needs_relayout = false; 447 bool needs_relayout = false;
300 if (message_id) { 448 if (message_id) {
301 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 449 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
302 base::string16 text = rb.GetLocalizedString(message_id); 450 base::string16 text = rb.GetLocalizedString(message_id);
303 if (!*label) { 451 if (!*label) {
304 *label = delegate_->CreateInfoLabel(); 452 *label = delegate_->CreateInfoLabel();
305 (*label)->SetText(text); 453 (*label)->SetText(text);
306 container_->AddChildViewAt(*label, index); 454 container_->AddChildViewAt(*label, index);
307 needs_relayout = true; 455 needs_relayout = true;
308 } else { 456 } else {
309 (*label)->SetText(text); 457 (*label)->SetText(text);
310 needs_relayout = PlaceViewAtIndex(*label, index); 458 needs_relayout = PlaceViewAtIndex(*label, index);
311 } 459 }
312 } else if (*label) { 460 } else if (*label) {
313 container_->RemoveChildView(*label); 461 container_->RemoveChildView(*label);
314 delete *label; 462 delete *label;
315 *label = NULL; 463 *label = nullptr;
316 needs_relayout = true; 464 needs_relayout = true;
317 } 465 }
318 return needs_relayout; 466 return needs_relayout;
319 } 467 }
320 468
321 void NetworkListView::NetworkIconChanged() { 469 bool NetworkListViewMd::UpdateWiFiHeaderRow(bool enabled,
470 int index,
471 WiFiHeaderRowView** view) {
tdanderson 2016/09/20 14:44:33 *& preferable to **?
varkha 2016/09/23 00:35:53 I thought the style was to pass output parameters
472 CHECK(view);
tdanderson 2016/09/20 14:44:33 Don't forget to remove / change to DCHECK
varkha 2016/09/23 00:35:53 |view| (unlike *view) should never be passed as nu
473 bool needs_relayout = false;
474 if (!*view) {
475 *view = new WiFiHeaderRowView(this, enabled);
476 container_->AddChildViewAt(*view, index);
477 needs_relayout = true;
478 } else {
479 (*view)->SetEnabled(enabled);
480 needs_relayout = PlaceViewAtIndex(*view, index);
481 }
482 return needs_relayout;
483 }
484
485 void NetworkListViewMd::NetworkIconChanged() {
322 Update(); 486 Update();
323 } 487 }
324 488
489 void NetworkListViewMd::ButtonPressed(views::Button* sender,
490 const ui::Event& event) {
491 if (sender == wifi_header_view_->toggle()) {
492 NetworkStateHandler* handler =
493 NetworkHandler::Get()->network_state_handler();
494 handler->SetTechnologyEnabled(NetworkTypePattern::WiFi(),
495 wifi_header_view_->is_toggled(),
496 chromeos::network_handler::ErrorCallback());
497 return;
498 } else if (sender == wifi_header_view_->join()) {
499 delegate_->OnOtherWifiClicked();
500 return;
501 }
502 NOTREACHED();
503 return;
tdanderson 2016/09/20 14:44:33 nit: not needed.
varkha 2016/09/23 00:35:53 Done.
504 }
505
325 } // namespace ui 506 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698