1503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato/*
2503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * Copyright (C) 2008 The Android Open Source Project
3503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *
4503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
5503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * you may not use this file except in compliance with the License.
6503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * You may obtain a copy of the License at
7503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *
8503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
9503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato *
10503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * Unless required by applicable law or agreed to in writing, software
11503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
12503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * See the License for the specific language governing permissions and
14503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato * limitations under the License.
15503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato */
16503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
1779de0c550037a5328bbc7f4fddaf02f192a5c283Joe Onoratopackage com.android.systemui.statusbar;
18503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
19503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.content.Context;
20503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.graphics.drawable.AnimationDrawable;
21503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.graphics.drawable.Drawable;
22503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.util.AttributeSet;
231e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onoratoimport android.util.Slog;
241e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onoratoimport android.view.View;
25503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.widget.ImageView;
26503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.widget.RemoteViews.RemoteView;
27503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
28503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato@RemoteView
29503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratopublic class AnimatedImageView extends ImageView {
30503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    AnimationDrawable mAnim;
31503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    boolean mAttached;
32503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
33503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public AnimatedImageView(Context context) {
34503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super(context);
35503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
36503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
37503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public AnimatedImageView(Context context, AttributeSet attrs) {
38503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super(context, attrs);
39503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
40503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
41503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    private void updateAnim() {
42503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        Drawable drawable = getDrawable();
43503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        if (mAttached && mAnim != null) {
44503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim.stop();
45503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        }
46503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        if (drawable instanceof AnimationDrawable) {
47503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim = (AnimationDrawable)drawable;
481e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato            if (isShown()) {
49503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato                mAnim.start();
50503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            }
51503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        } else {
52503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim = null;
53503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        }
54503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
55503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
56503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
57503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void setImageDrawable(Drawable drawable) {
58503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.setImageDrawable(drawable);
59503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        updateAnim();
60503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
61503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
62503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
63503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @android.view.RemotableViewMethod
64503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void setImageResource(int resid) {
65503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.setImageResource(resid);
66503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        updateAnim();
67503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
68503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
69503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
70503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void onAttachedToWindow() {
71503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.onAttachedToWindow();
72503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        mAttached = true;
73503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
74503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
75503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
76503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void onDetachedFromWindow() {
77503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.onDetachedFromWindow();
78503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        if (mAnim != null) {
79503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim.stop();
80503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        }
81503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        mAttached = false;
82503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
831e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato
841e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato    @Override
851e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato    protected void onVisibilityChanged(View changedView, int vis) {
861e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato        super.onVisibilityChanged(changedView, vis);
871e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato        if (mAnim != null) {
881e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato            if (isShown()) {
891e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato                mAnim.start();
901e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato            } else {
911e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato                mAnim.stop();
921e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato            }
931e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato        }
941e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato    }
95503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato}
96503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
97