1// Copyright (c) 2012 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
5#ifndef ASH_SYSTEM_CHROMEOS_NETWORK_TRAY_NETWORK_H
6#define ASH_SYSTEM_CHROMEOS_NETWORK_TRAY_NETWORK_H
7
8#include <set>
9
10#include "ash/system/chromeos/network/network_icon.h"
11#include "ash/system/chromeos/network/network_observer.h"
12#include "ash/system/chromeos/network/tray_network_state_observer.h"
13#include "ash/system/tray/system_tray_item.h"
14#include "base/memory/scoped_ptr.h"
15#include "base/time/time.h"
16
17namespace chromeos {
18class NetworkState;
19}
20
21namespace ash {
22namespace internal {
23
24namespace tray {
25class NetworkDefaultView;
26class NetworkDetailedView;
27class NetworkMessages;
28class NetworkMessageView;
29class NetworkNotificationView;
30class NetworkTrayView;
31}
32
33class TrayNetwork : public SystemTrayItem,
34                    public NetworkObserver,
35                    public TrayNetworkStateObserver::Delegate {
36 public:
37  explicit TrayNetwork(SystemTray* system_tray);
38  virtual ~TrayNetwork();
39
40  tray::NetworkDetailedView* detailed() { return detailed_; }
41
42  // SystemTrayItem
43  virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
44  virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
45  virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE;
46  virtual views::View* CreateNotificationView(
47      user::LoginStatus status) OVERRIDE;
48  virtual void DestroyTrayView() OVERRIDE;
49  virtual void DestroyDefaultView() OVERRIDE;
50  virtual void DestroyDetailedView() OVERRIDE;
51  virtual void DestroyNotificationView() OVERRIDE;
52  virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
53  virtual void UpdateAfterShelfAlignmentChange(
54      ShelfAlignment alignment) OVERRIDE;
55
56  // NetworkObserver
57  virtual void SetNetworkMessage(
58      NetworkTrayDelegate* delegate,
59      MessageType message_type,
60      NetworkType network_type,
61      const base::string16& title,
62      const base::string16& message,
63      const std::vector<base::string16>& links) OVERRIDE;
64  virtual void ClearNetworkMessage(MessageType message_type) OVERRIDE;
65  virtual void RequestToggleWifi() OVERRIDE;
66
67  // TrayNetworkStateObserver::Delegate
68  virtual void NetworkStateChanged(bool list_changed) OVERRIDE;
69  virtual void NetworkServiceChanged(
70      const chromeos::NetworkState* network) OVERRIDE;
71
72 private:
73  friend class tray::NetworkMessageView;
74  friend class tray::NetworkNotificationView;
75
76  void LinkClicked(MessageType message_type, int link_id);
77
78  const tray::NetworkMessages* messages() const { return messages_.get(); }
79
80  tray::NetworkTrayView* tray_;
81  tray::NetworkDefaultView* default_;
82  tray::NetworkDetailedView* detailed_;
83  tray::NetworkNotificationView* notification_;
84  scoped_ptr<tray::NetworkMessages> messages_;
85  bool request_wifi_view_;
86  scoped_ptr<TrayNetworkStateObserver> network_state_observer_;
87
88  DISALLOW_COPY_AND_ASSIGN(TrayNetwork);
89};
90
91}  // namespace internal
92}  // namespace ash
93
94#endif  // ASH_SYSTEM_CHROMEOS_NETWORK_TRAY_NETWORK_H
95