1// Copyright (c) 2013 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 UI_CHROMEOS_NETWORK_NETWORK_ICON_ANIMATION_H_
6#define UI_CHROMEOS_NETWORK_NETWORK_ICON_ANIMATION_H_
7
8#include <set>
9#include <string>
10
11#include "base/observer_list.h"
12#include "ui/chromeos/ui_chromeos_export.h"
13#include "ui/gfx/animation/animation_delegate.h"
14#include "ui/gfx/animation/throb_animation.h"
15
16namespace ui {
17namespace network_icon {
18
19class AnimationObserver;
20
21// Single instance class to handle icon animations and keep them in sync.
22class UI_CHROMEOS_EXPORT NetworkIconAnimation : public gfx::AnimationDelegate {
23 public:
24  NetworkIconAnimation();
25  virtual ~NetworkIconAnimation();
26
27  // Returns the current animation value, [0-1].
28  double GetAnimation();
29
30  // The animation stops when all observers have been removed.
31  // Be sure to remove observers when no associated icons are animating.
32  void AddObserver(AnimationObserver* observer);
33  void RemoveObserver(AnimationObserver* observer);
34
35  // gfx::AnimationDelegate implementation.
36  virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
37
38  static NetworkIconAnimation* GetInstance();
39
40 private:
41  gfx::ThrobAnimation animation_;
42  ObserverList<AnimationObserver> observers_;
43};
44
45}  // namespace network_icon
46}  // namespace ui
47
48#endif  // UI_CHROMEOS_NETWORK_NETWORK_ICON_ANIMATION_H_
49