 Chromium Code Reviews
 Chromium Code Reviews Issue 2701463003:
  Create a Tether section in the system tray network list.  (Closed)
    
  
    Issue 2701463003:
  Create a Tether section in the system tray network list.  (Closed) 
  | Index: ash/common/system/chromeos/network/network_list_md.cc | 
| diff --git a/ash/common/system/chromeos/network/network_list_md.cc b/ash/common/system/chromeos/network/network_list_md.cc | 
| index b91d6eacff82af46f21fafee6422c4b42749d584..c0e08440e266f0324b59accab85cad3b48fa869f 100644 | 
| --- a/ash/common/system/chromeos/network/network_list_md.cc | 
| +++ b/ash/common/system/chromeos/network/network_list_md.cc | 
| @@ -182,6 +182,24 @@ class CellularHeaderRowView : public NetworkListViewMd::SectionHeaderRowView { | 
| DISALLOW_COPY_AND_ASSIGN(CellularHeaderRowView); | 
| }; | 
| +class TetherHeaderRowView : public NetworkListViewMd::SectionHeaderRowView { | 
| + public: | 
| + TetherHeaderRowView() | 
| + : SectionHeaderRowView(IDS_ASH_STATUS_TRAY_NETWORK_TETHER) {} | 
| + | 
| + ~TetherHeaderRowView() override {} | 
| + | 
| + const char* GetClassName() const override { return "TetherHeaderRowView"; } | 
| + | 
| + protected: | 
| + void OnToggleToggled(bool is_on) override { | 
| + // TODO (hansberry): Persist toggle to settings/preferences. | 
| + } | 
| + | 
| + private: | 
| + DISALLOW_COPY_AND_ASSIGN(TetherHeaderRowView); | 
| +}; | 
| + | 
| class WifiHeaderRowView : public NetworkListViewMd::SectionHeaderRowView { | 
| public: | 
| explicit WifiHeaderRowView(NetworkListDelegate* network_list_delegate) | 
| @@ -263,8 +281,10 @@ NetworkListViewMd::NetworkListViewMd(NetworkListDelegate* delegate) | 
| no_wifi_networks_view_(nullptr), | 
| no_cellular_networks_view_(nullptr), | 
| cellular_header_view_(nullptr), | 
| + tether_header_view_(nullptr), | 
| wifi_header_view_(nullptr), | 
| cellular_separator_view_(nullptr), | 
| + tether_separator_view_(nullptr), | 
| wifi_separator_view_(nullptr) { | 
| CHECK(delegate_); | 
| } | 
| @@ -275,10 +295,22 @@ NetworkListViewMd::~NetworkListViewMd() { | 
| void NetworkListViewMd::Update() { | 
| CHECK(container()); | 
| - NetworkStateHandler::NetworkStateList network_list; | 
| + | 
| NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 
| + | 
| + NetworkStateHandler::NetworkStateList network_list; | 
| handler->GetVisibleNetworkList(&network_list); | 
| UpdateNetworks(network_list); | 
| + | 
| + NetworkStateHandler::NetworkStateList tether_network_list; | 
| + handler->GetNetworkListByType( | 
| + NetworkTypePattern::Tether(), false /* configured_only */, | 
| + false /* visible_only */, 0 /* no limit */, &tether_network_list); | 
| + for (const auto& tether_network : tether_network_list) { | 
| + network_list_.push_back( | 
| + base::MakeUnique<NetworkInfo>(tether_network->guid())); | 
| + } | 
| + | 
| UpdateNetworkIcons(); | 
| OrderNetworks(); | 
| UpdateNetworkListInternal(); | 
| @@ -376,6 +408,8 @@ void NetworkListViewMd::UpdateNetworkIcons() { | 
| info->type = NetworkInfo::Type::WIFI; | 
| else if (network->Matches(NetworkTypePattern::Cellular())) | 
| info->type = NetworkInfo::Type::CELLULAR; | 
| + else if (network->Matches(NetworkTypePattern::Tether())) | 
| + info->type = NetworkInfo::Type::TETHER; | 
| if (prohibited_by_policy) { | 
| info->tooltip = | 
| l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_PROHIBITED); | 
| @@ -466,6 +500,27 @@ NetworkListViewMd::UpdateNetworkListEntries() { | 
| new_cellular_service_paths->end()); | 
| } | 
| + // TODO (hansberry): Can't check on the |pattern| here like with Wi-Fi and | 
| + // Cellular because Tether does not match NonVirtual. Is that okay? Should | 
| + // |delegate_|'s GetNetworkTypePattern be adjusted to match Tether? | 
| 
stevenjb
2017/02/16 22:56:35
I would replace the question in the comment with s
 
Ryan Hansberry
2017/02/17 19:29:42
Done.
 | 
| + if (handler->IsTechnologyAvailable(NetworkTypePattern::Tether())) { | 
| + index = UpdateSectionHeaderRow( | 
| + NetworkTypePattern::Tether(), | 
| + handler->IsTechnologyEnabled(NetworkTypePattern::Tether()), index, | 
| + &tether_header_view_, &tether_separator_view_); | 
| + | 
| + // TODO (hansberry): Should a message similar to | 
| + // IDS_ASH_STATUS_TRAY_NO_CELLULAR_NETWORKS be shown if Tether technology | 
| + // is enabled but no networks are around? | 
| + | 
| + // Add Tether networks. | 
| + std::unique_ptr<std::set<std::string>> new_tether_guids = | 
| + UpdateNetworkChildren(NetworkInfo::Type::TETHER, index); | 
| + index += new_tether_guids->size(); | 
| + new_service_paths->insert(new_tether_guids->begin(), | 
| + new_tether_guids->end()); | 
| + } | 
| + | 
| if (pattern.MatchesPattern(NetworkTypePattern::WiFi())) { | 
| index = UpdateSectionHeaderRow( | 
| NetworkTypePattern::WiFi(), | 
| @@ -575,6 +630,8 @@ int NetworkListViewMd::UpdateSectionHeaderRow( | 
| if (!*view) { | 
| if (pattern.Equals(NetworkTypePattern::Cellular())) | 
| *view = new CellularHeaderRowView(); | 
| + else if (pattern.Equals(NetworkTypePattern::Tether())) | 
| + *view = new TetherHeaderRowView(); | 
| else if (pattern.Equals(NetworkTypePattern::WiFi())) | 
| *view = new WifiHeaderRowView(delegate_); | 
| else |