| OLD | NEW |
| 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 "ash/common/system/chromeos/network/network_list.h" | 5 #include "ash/common/system/chromeos/network/network_list.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "ash/common/system/chromeos/network/network_icon.h" | 9 #include "ash/common/system/chromeos/network/network_icon.h" |
| 10 #include "ash/common/system/chromeos/network/network_icon_animation.h" | 10 #include "ash/common/system/chromeos/network/network_icon_animation.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 CHECK(container()); | 78 CHECK(container()); |
| 79 NetworkStateHandler::NetworkStateList network_list; | 79 NetworkStateHandler::NetworkStateList network_list; |
| 80 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 80 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
| 81 handler->GetVisibleNetworkList(&network_list); | 81 handler->GetVisibleNetworkList(&network_list); |
| 82 UpdateNetworks(network_list); | 82 UpdateNetworks(network_list); |
| 83 UpdateNetworkIcons(); | 83 UpdateNetworkIcons(); |
| 84 UpdateNetworkListInternal(); | 84 UpdateNetworkListInternal(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 bool NetworkListView::IsNetworkEntry(views::View* view, | 87 bool NetworkListView::IsNetworkEntry(views::View* view, |
| 88 std::string* service_path) const { | 88 std::string* guid) const { |
| 89 std::map<views::View*, std::string>::const_iterator found = | 89 std::map<views::View*, std::string>::const_iterator found = |
| 90 network_map_.find(view); | 90 network_map_.find(view); |
| 91 if (found == network_map_.end()) | 91 if (found == network_map_.end()) |
| 92 return false; | 92 return false; |
| 93 *service_path = found->second; | 93 *guid = found->second; |
| 94 return true; | 94 return true; |
| 95 } | 95 } |
| 96 | 96 |
| 97 void NetworkListView::UpdateNetworks( | 97 void NetworkListView::UpdateNetworks( |
| 98 const NetworkStateHandler::NetworkStateList& networks) { | 98 const NetworkStateHandler::NetworkStateList& networks) { |
| 99 SCOPED_NET_LOG_IF_SLOW(); | 99 SCOPED_NET_LOG_IF_SLOW(); |
| 100 network_list_.clear(); | 100 network_list_.clear(); |
| 101 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern(); | 101 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern(); |
| 102 for (NetworkStateHandler::NetworkStateList::const_iterator iter = | 102 for (NetworkStateHandler::NetworkStateList::const_iterator iter = |
| 103 networks.begin(); | 103 networks.begin(); |
| 104 iter != networks.end(); ++iter) { | 104 iter != networks.end(); ++iter) { |
| 105 const chromeos::NetworkState* network = *iter; | 105 const chromeos::NetworkState* network = *iter; |
| 106 if (!pattern.MatchesType(network->type())) | 106 if (!pattern.MatchesType(network->type())) |
| 107 continue; | 107 continue; |
| 108 network_list_.push_back(base::MakeUnique<NetworkInfo>(network->path())); | 108 network_list_.push_back(base::MakeUnique<NetworkInfo>(network->guid())); |
| 109 } | 109 } |
| 110 } | 110 } |
| 111 | 111 |
| 112 void NetworkListView::UpdateNetworkIcons() { | 112 void NetworkListView::UpdateNetworkIcons() { |
| 113 SCOPED_NET_LOG_IF_SLOW(); | 113 SCOPED_NET_LOG_IF_SLOW(); |
| 114 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 114 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
| 115 | 115 |
| 116 // First, update state for all networks | 116 // First, update state for all networks |
| 117 bool animating = false; | 117 bool animating = false; |
| 118 | 118 |
| 119 for (auto& info : network_list_) { | 119 for (auto& info : network_list_) { |
| 120 const chromeos::NetworkState* network = | 120 const chromeos::NetworkState* network = |
| 121 handler->GetNetworkState(info->service_path); | 121 handler->GetNetworkStateFromGuid(info->guid); |
| 122 if (!network) | 122 if (!network) |
| 123 continue; | 123 continue; |
| 124 bool prohibited_by_policy = IsProhibitedByPolicy(network); | 124 bool prohibited_by_policy = IsProhibitedByPolicy(network); |
| 125 info->image = | 125 info->image = |
| 126 network_icon::GetImageForNetwork(network, network_icon::ICON_TYPE_LIST); | 126 network_icon::GetImageForNetwork(network, network_icon::ICON_TYPE_LIST); |
| 127 info->label = | 127 info->label = |
| 128 network_icon::GetLabelForNetwork(network, network_icon::ICON_TYPE_LIST); | 128 network_icon::GetLabelForNetwork(network, network_icon::ICON_TYPE_LIST); |
| 129 info->highlight = | 129 info->highlight = |
| 130 network->IsConnectedState() || network->IsConnectingState(); | 130 network->IsConnectedState() || network->IsConnectingState(); |
| 131 info->disable = | 131 info->disable = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 145 if (animating) | 145 if (animating) |
| 146 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); | 146 network_icon::NetworkIconAnimation::GetInstance()->AddObserver(this); |
| 147 else | 147 else |
| 148 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); | 148 network_icon::NetworkIconAnimation::GetInstance()->RemoveObserver(this); |
| 149 } | 149 } |
| 150 | 150 |
| 151 void NetworkListView::UpdateNetworkListInternal() { | 151 void NetworkListView::UpdateNetworkListInternal() { |
| 152 SCOPED_NET_LOG_IF_SLOW(); | 152 SCOPED_NET_LOG_IF_SLOW(); |
| 153 // Get the updated list entries | 153 // Get the updated list entries |
| 154 network_map_.clear(); | 154 network_map_.clear(); |
| 155 std::set<std::string> new_service_paths; | 155 std::set<std::string> new_guids; |
| 156 bool needs_relayout = UpdateNetworkListEntries(&new_service_paths); | 156 bool needs_relayout = UpdateNetworkListEntries(&new_guids); |
| 157 | 157 |
| 158 // Remove old children | 158 // Remove old children |
| 159 std::set<std::string> remove_service_paths; | 159 std::set<std::string> remove_guids; |
| 160 for (ServicePathMap::const_iterator it = service_path_map_.begin(); | 160 for (NetworkGuidMap::const_iterator it = network_guid_map_.begin(); |
| 161 it != service_path_map_.end(); ++it) { | 161 it != network_guid_map_.end(); ++it) { |
| 162 if (new_service_paths.find(it->first) == new_service_paths.end()) { | 162 if (new_guids.find(it->first) == new_guids.end()) { |
| 163 remove_service_paths.insert(it->first); | 163 remove_guids.insert(it->first); |
| 164 network_map_.erase(it->second); | 164 network_map_.erase(it->second); |
| 165 delete it->second; | 165 delete it->second; |
| 166 needs_relayout = true; | 166 needs_relayout = true; |
| 167 } | 167 } |
| 168 } | 168 } |
| 169 | 169 |
| 170 for (std::set<std::string>::const_iterator remove_it = | 170 for (std::set<std::string>::const_iterator remove_it = remove_guids.begin(); |
| 171 remove_service_paths.begin(); | 171 remove_it != remove_guids.end(); ++remove_it) { |
| 172 remove_it != remove_service_paths.end(); ++remove_it) { | 172 network_guid_map_.erase(*remove_it); |
| 173 service_path_map_.erase(*remove_it); | |
| 174 } | 173 } |
| 175 | 174 |
| 176 if (needs_relayout) | 175 if (needs_relayout) |
| 177 HandleRelayout(); | 176 HandleRelayout(); |
| 178 } | 177 } |
| 179 | 178 |
| 180 void NetworkListView::HandleRelayout() { | 179 void NetworkListView::HandleRelayout() { |
| 181 views::View* selected_view = nullptr; | 180 views::View* selected_view = nullptr; |
| 182 for (auto& iter : service_path_map_) { | 181 for (auto& iter : network_guid_map_) { |
| 183 if (delegate_->IsViewHovered(iter.second)) { | 182 if (delegate_->IsViewHovered(iter.second)) { |
| 184 selected_view = iter.second; | 183 selected_view = iter.second; |
| 185 break; | 184 break; |
| 186 } | 185 } |
| 187 } | 186 } |
| 188 container()->SizeToPreferredSize(); | 187 container()->SizeToPreferredSize(); |
| 189 delegate_->RelayoutScrollList(); | 188 delegate_->RelayoutScrollList(); |
| 190 if (selected_view) | 189 if (selected_view) |
| 191 container()->ScrollRectToVisible(selected_view->bounds()); | 190 container()->ScrollRectToVisible(selected_view->bounds()); |
| 192 } | 191 } |
| 193 | 192 |
| 194 bool NetworkListView::UpdateNetworkListEntries( | 193 bool NetworkListView::UpdateNetworkListEntries( |
| 195 std::set<std::string>* new_service_paths) { | 194 std::set<std::string>* new_guids) { |
| 196 bool needs_relayout = false; | 195 bool needs_relayout = false; |
| 197 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 196 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
| 198 | 197 |
| 199 // Insert child views | 198 // Insert child views |
| 200 int index = 0; | 199 int index = 0; |
| 201 | 200 |
| 202 // Highlighted networks | 201 // Highlighted networks |
| 203 needs_relayout |= | 202 needs_relayout |= |
| 204 UpdateNetworkChildren(new_service_paths, &index, true /* highlighted */); | 203 UpdateNetworkChildren(new_guids, &index, true /* highlighted */); |
| 205 | 204 |
| 206 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern(); | 205 const NetworkTypePattern pattern = delegate_->GetNetworkTypePattern(); |
| 207 if (pattern.MatchesPattern(NetworkTypePattern::Cellular())) { | 206 if (pattern.MatchesPattern(NetworkTypePattern::Cellular())) { |
| 208 // Cellular initializing | 207 // Cellular initializing |
| 209 int message_id = network_icon::GetCellularUninitializedMsg(); | 208 int message_id = network_icon::GetCellularUninitializedMsg(); |
| 210 if (!message_id && | 209 if (!message_id && |
| 211 handler->IsTechnologyEnabled(NetworkTypePattern::Mobile()) && | 210 handler->IsTechnologyEnabled(NetworkTypePattern::Mobile()) && |
| 212 !handler->FirstNetworkByType(NetworkTypePattern::Mobile())) { | 211 !handler->FirstNetworkByType(NetworkTypePattern::Mobile())) { |
| 213 message_id = IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS; | 212 message_id = IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS; |
| 214 } | 213 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 227 ? IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED | 226 ? IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED |
| 228 : IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; | 227 : IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED; |
| 229 } | 228 } |
| 230 needs_relayout |= | 229 needs_relayout |= |
| 231 UpdateInfoLabel(message_id, index, &no_wifi_networks_view_); | 230 UpdateInfoLabel(message_id, index, &no_wifi_networks_view_); |
| 232 if (message_id) | 231 if (message_id) |
| 233 ++index; | 232 ++index; |
| 234 } | 233 } |
| 235 | 234 |
| 236 // Un-highlighted networks | 235 // Un-highlighted networks |
| 237 needs_relayout |= UpdateNetworkChildren(new_service_paths, &index, | 236 needs_relayout |= |
| 238 false /* not highlighted */); | 237 UpdateNetworkChildren(new_guids, &index, false /* not highlighted */); |
| 239 | 238 |
| 240 // No networks or other messages (fallback) | 239 // No networks or other messages (fallback) |
| 241 if (index == 0) { | 240 if (index == 0) { |
| 242 needs_relayout |= UpdateInfoLabel(IDS_ASH_STATUS_TRAY_NO_NETWORKS, index, | 241 needs_relayout |= UpdateInfoLabel(IDS_ASH_STATUS_TRAY_NO_NETWORKS, index, |
| 243 &no_wifi_networks_view_); | 242 &no_wifi_networks_view_); |
| 244 } | 243 } |
| 245 | 244 |
| 246 return needs_relayout; | 245 return needs_relayout; |
| 247 } | 246 } |
| 248 | 247 |
| 249 bool NetworkListView::UpdateNetworkChildren( | 248 bool NetworkListView::UpdateNetworkChildren(std::set<std::string>* new_guids, |
| 250 std::set<std::string>* new_service_paths, | 249 int* child_index, |
| 251 int* child_index, | 250 bool highlighted) { |
| 252 bool highlighted) { | |
| 253 bool needs_relayout = false; | 251 bool needs_relayout = false; |
| 254 int index = *child_index; | 252 int index = *child_index; |
| 255 for (auto& info : network_list_) { | 253 for (auto& info : network_list_) { |
| 256 if (info->highlight != highlighted) | 254 if (info->highlight != highlighted) |
| 257 continue; | 255 continue; |
| 258 needs_relayout |= UpdateNetworkChild(index++, info.get()); | 256 needs_relayout |= UpdateNetworkChild(index++, info.get()); |
| 259 new_service_paths->insert(info->service_path); | 257 new_guids->insert(info->guid); |
| 260 } | 258 } |
| 261 *child_index = index; | 259 *child_index = index; |
| 262 return needs_relayout; | 260 return needs_relayout; |
| 263 } | 261 } |
| 264 | 262 |
| 265 bool NetworkListView::UpdateNetworkChild(int index, const NetworkInfo* info) { | 263 bool NetworkListView::UpdateNetworkChild(int index, const NetworkInfo* info) { |
| 266 bool needs_relayout = false; | 264 bool needs_relayout = false; |
| 267 views::View* network_view = nullptr; | 265 views::View* network_view = nullptr; |
| 268 ServicePathMap::const_iterator found = | 266 NetworkGuidMap::const_iterator found = network_guid_map_.find(info->guid); |
| 269 service_path_map_.find(info->service_path); | 267 if (found == network_guid_map_.end()) { |
| 270 if (found == service_path_map_.end()) { | |
| 271 network_view = delegate_->CreateViewForNetwork(*info); | 268 network_view = delegate_->CreateViewForNetwork(*info); |
| 272 container()->AddChildViewAt(network_view, index); | 269 container()->AddChildViewAt(network_view, index); |
| 273 needs_relayout = true; | 270 needs_relayout = true; |
| 274 } else { | 271 } else { |
| 275 network_view = found->second; | 272 network_view = found->second; |
| 276 network_view->RemoveAllChildViews(true); | 273 network_view->RemoveAllChildViews(true); |
| 277 delegate_->UpdateViewForNetwork(network_view, *info); | 274 delegate_->UpdateViewForNetwork(network_view, *info); |
| 278 network_view->Layout(); | 275 network_view->Layout(); |
| 279 network_view->SchedulePaint(); | 276 network_view->SchedulePaint(); |
| 280 needs_relayout = PlaceViewAtIndex(network_view, index); | 277 needs_relayout = PlaceViewAtIndex(network_view, index); |
| 281 } | 278 } |
| 282 if (info->disable) | 279 if (info->disable) |
| 283 network_view->SetEnabled(false); | 280 network_view->SetEnabled(false); |
| 284 network_map_[network_view] = info->service_path; | 281 network_map_[network_view] = info->guid; |
| 285 service_path_map_[info->service_path] = network_view; | 282 network_guid_map_[info->guid] = network_view; |
| 286 return needs_relayout; | 283 return needs_relayout; |
| 287 } | 284 } |
| 288 | 285 |
| 289 bool NetworkListView::PlaceViewAtIndex(views::View* view, int index) { | 286 bool NetworkListView::PlaceViewAtIndex(views::View* view, int index) { |
| 290 if (container()->child_at(index) == view) | 287 if (container()->child_at(index) == view) |
| 291 return false; | 288 return false; |
| 292 container()->ReorderChildView(view, index); | 289 container()->ReorderChildView(view, index); |
| 293 return true; | 290 return true; |
| 294 } | 291 } |
| 295 | 292 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 316 needs_relayout = true; | 313 needs_relayout = true; |
| 317 } | 314 } |
| 318 return needs_relayout; | 315 return needs_relayout; |
| 319 } | 316 } |
| 320 | 317 |
| 321 void NetworkListView::NetworkIconChanged() { | 318 void NetworkListView::NetworkIconChanged() { |
| 322 Update(); | 319 Update(); |
| 323 } | 320 } |
| 324 | 321 |
| 325 } // namespace ash | 322 } // namespace ash |
| OLD | NEW |