Chromium Code Reviews| 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 |