1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
ash / system / network / network_detailed_network_view.h [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_H_
#define ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_H_
#include "ash/ash_export.h"
#include "ash/system/network/network_detailed_view.h"
#include "ash/system/network/network_list_mobile_header_view.h"
#include "ash/system/network/network_list_network_header_view.h"
#include "ash/system/network/network_list_network_item_view.h"
#include "ash/system/network/network_list_tether_hosts_header_view.h"
#include "ash/system/network/network_list_wifi_header_view.h"
#include "ash/system/tray/hover_highlight_view.h"
#include "base/memory/raw_ptr.h"
#include "ui/views/view.h"
namespace ash {
namespace {
using chromeos::network_config::mojom::NetworkType;
} // namespace
class DetailedViewDelegate;
// This class defines both the interface used to interact with the
// NetworkDetailedView and declares delegate interface it uses to propagate user
// interactions. It also defines the factory used to create instances of
// implementations of this class.
class ASH_EXPORT NetworkDetailedNetworkView {
public:
// This class defines the interface that NetworkDetailedNetworkView will use
// to propagate user interactions.
class Delegate : public NetworkDetailedView::Delegate {
public:
Delegate() = default;
~Delegate() override;
virtual void OnWifiToggleClicked(bool new_state) = 0;
virtual void OnMobileToggleClicked(bool new_state) = 0;
};
class Factory {
public:
Factory(const Factory&) = delete;
const Factory& operator=(const Factory&) = delete;
virtual ~Factory() = default;
static std::unique_ptr<NetworkDetailedNetworkView> Create(
DetailedViewDelegate* detailed_view_delegate,
Delegate* delegate);
static void SetFactoryForTesting(Factory* test_factory);
protected:
Factory() = default;
virtual std::unique_ptr<NetworkDetailedNetworkView> CreateForTesting(
Delegate* delegate) = 0;
};
NetworkDetailedNetworkView(const NetworkDetailedNetworkView&) = delete;
NetworkDetailedNetworkView& operator=(const NetworkDetailedNetworkView&) =
delete;
virtual ~NetworkDetailedNetworkView() = default;
// Notifies that the network list has changed and the layout is invalid.
virtual void NotifyNetworkListChanged() = 0;
// Returns the implementation casted to views::View*. This may be |nullptr|
// when testing, where the implementation might not inherit from views::View.
virtual views::View* GetAsView() = 0;
// Creates, adds and returns a new network list item. The client is
// expected to use the returned pointer for removing and rearranging
// the list item.
virtual NetworkListNetworkItemView* AddNetworkListItem(NetworkType type) = 0;
// Creates, adds and returns a `HoverHighlightView`, which is the "Join Wifi
// network" entry for the Wifi section if `NetworkType::kWiFi` is passed in or
// the "Add eSIM" entry for the Mobile data section if `NetworkType::kMobile`
// is passed in. The client is expected to use the returned pointer for
// removing and rearranging this entry.
virtual HoverHighlightView* AddConfigureNetworkEntry(NetworkType type) = 0;
// Creates, adds and returns a Wifi sticky sub-header to the end of the
// network list. The client is expected to use the returned pointer for
// removing and rearranging the sub-header.
virtual NetworkListWifiHeaderView* AddWifiSectionHeader() = 0;
// Creates, adds and returns a Mobile sticky sub-header to the end of the
// network list. The client is expected to use the returned pointer for
// removing and rearranging the sub-header.
virtual NetworkListMobileHeaderView* AddMobileSectionHeader() = 0;
// Creates, adds and returns a Tether Hosts sticky sub-header to the end
// of the network list. The client is expected to use the returned pointer
// for removing and rearranging the sub-header.
virtual NetworkListTetherHostsHeaderView* AddTetherHostsSectionHeader(
NetworkListTetherHostsHeaderView::OnExpandedStateToggle callback) = 0;
// Updates the scanning bar visibility.
virtual void UpdateScanningBarVisibility(bool visible) = 0;
// Returns the network list.
virtual views::View* GetNetworkList(NetworkType type) = 0;
// Reorders the container or list view based on the index.
virtual void ReorderFirstListView(size_t index) = 0;
virtual void ReorderNetworkTopContainer(size_t index) = 0;
virtual void ReorderNetworkListView(size_t index) = 0;
virtual void ReorderMobileTopContainer(size_t index) = 0;
virtual void ReorderMobileListView(size_t index) = 0;
virtual void ReorderTetherHostsListView(size_t index) = 0;
// Removes the first list view if there's no child views in it.
virtual void MaybeRemoveFirstListView() = 0;
// Updates the containers, shows or hides the corresponding list view.
virtual void UpdateWifiStatus(bool enabled) = 0;
virtual void UpdateMobileStatus(bool enabled) = 0;
virtual void UpdateTetherHostsStatus(bool enabled) = 0;
// Provides some virtual methods to get and set the scroll view's position
// before and after reordering the network list.
virtual void ScrollToPosition(int position) {}
virtual int GetScrollPosition();
protected:
explicit NetworkDetailedNetworkView(Delegate* delegate);
Delegate* delegate() { return delegate_; }
private:
raw_ptr<Delegate> delegate_;
};
} // namespace ash
#endif // ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_H_