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 #include "ash/system/chromeos/network/network_icon_animation.h" 6 7 #include "ash/system/chromeos/network/network_icon_animation_observer.h" 8 9 namespace { 10 const int kThrobDurationMs = 750; // Animation cycle length. 11 } 12 13 namespace ash { 14 namespace network_icon { 15 16 NetworkIconAnimation::NetworkIconAnimation() 17 : animation_(this) { 18 // Set up the animation throbber. 19 animation_.SetThrobDuration(kThrobDurationMs); 20 animation_.SetTweenType(ui::Tween::LINEAR); 21 } 22 23 NetworkIconAnimation::~NetworkIconAnimation() { 24 } 25 26 void NetworkIconAnimation::AnimationProgressed(const ui::Animation* animation) { 27 if (animation != &animation_) 28 return; 29 FOR_EACH_OBSERVER(AnimationObserver, observers_, NetworkIconChanged()); 30 } 31 32 double NetworkIconAnimation::GetAnimation() { 33 if (!animation_.is_animating()) { 34 animation_.Reset(); 35 animation_.StartThrobbing(-1 /*throb indefinitely*/); 36 return 0; 37 } 38 return animation_.GetCurrentValue(); 39 } 40 41 void NetworkIconAnimation::AddObserver(AnimationObserver* observer) { 42 if (!observers_.HasObserver(observer)) 43 observers_.AddObserver(observer); 44 } 45 46 void NetworkIconAnimation::RemoveObserver(AnimationObserver* observer) { 47 observers_.RemoveObserver(observer); 48 if (observers_.size() == 0) 49 animation_.Reset(); // Stops the animation and resets the current value. 50 } 51 52 // static 53 NetworkIconAnimation* NetworkIconAnimation::GetInstance() { 54 static NetworkIconAnimation* s_icon_animation = 55 new NetworkIconAnimation(); 56 return s_icon_animation; 57 } 58 59 } // namespace network_icon 60 } // namespace ash 61