network_list_network_header_view.cc 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright 2022 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/system/network/network_list_network_header_view.h"
  5. #include "ash/ash_export.h"
  6. #include "ash/constants/ash_features.h"
  7. #include "ash/shell.h"
  8. #include "ash/system/model/system_tray_model.h"
  9. #include "ash/system/network/network_list_header_view.h"
  10. #include "ash/system/network/tray_network_state_model.h"
  11. #include "ash/system/tray/tray_popup_utils.h"
  12. #include "ash/system/tray/tray_toggle_button.h"
  13. #include "ash/system/tray/tri_view.h"
  14. #include "base/memory/weak_ptr.h"
  15. #include "ui/views/view.h"
  16. namespace ash {
  17. NetworkListNetworkHeaderView::NetworkListNetworkHeaderView(Delegate* delegate,
  18. int label_id)
  19. : NetworkListHeaderView(label_id),
  20. model_(Shell::Get()->system_tray_model()->network_state_model()),
  21. delegate_(delegate) {
  22. std::unique_ptr<TrayToggleButton> toggle = std::make_unique<TrayToggleButton>(
  23. base::BindRepeating(&NetworkListNetworkHeaderView::ToggleButtonPressed,
  24. weak_factory_.GetWeakPtr()),
  25. label_id);
  26. toggle->SetID(kToggleButtonId);
  27. toggle_ = toggle.get();
  28. container()->AddView(TriView::Container::END, toggle.release());
  29. }
  30. NetworkListNetworkHeaderView::~NetworkListNetworkHeaderView() = default;
  31. void NetworkListNetworkHeaderView::SetToggleState(bool enabled, bool is_on) {
  32. toggle_->SetEnabled(enabled);
  33. toggle_->SetAcceptsEvents(enabled);
  34. toggle_->AnimateIsOn(is_on);
  35. }
  36. void NetworkListNetworkHeaderView::AddExtraButtons() {}
  37. void NetworkListNetworkHeaderView::OnToggleToggled(bool is_on) {}
  38. void NetworkListNetworkHeaderView::SetToggleVisibility(bool visible) {
  39. toggle_->SetVisible(visible);
  40. }
  41. void NetworkListNetworkHeaderView::ToggleButtonPressed() {
  42. // In the event of frequent clicks, helps to prevent a toggle button state
  43. // from becoming inconsistent with the async operation of enabling /
  44. // disabling of mobile radio. The toggle will get unlocked in the next
  45. // call to SetToggleState(). Note that we don't disable/enable
  46. // because that would clear focus.
  47. toggle_->SetAcceptsEvents(false);
  48. OnToggleToggled(toggle_->GetIsOn());
  49. }
  50. } // namespace ash