AnimatedImageView.java revision 180979f76b0c99cd7053a44692f6408721b74bce
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.view.View;
24503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.widget.ImageView;
25503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratoimport android.widget.RemoteViews.RemoteView;
26503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
27503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato@RemoteView
28503007dd023668b1e45de948d3673e594d7f5a82Joe Onoratopublic class AnimatedImageView extends ImageView {
29503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    AnimationDrawable mAnim;
30503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    boolean mAttached;
31503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
32503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public AnimatedImageView(Context context) {
33503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super(context);
34503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
35503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
36503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public AnimatedImageView(Context context, AttributeSet attrs) {
37503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super(context, attrs);
38503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
39503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
40503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    private void updateAnim() {
41180979f76b0c99cd7053a44692f6408721b74bceJohn Spurlock        Drawable drawable = getDrawable();
42503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        if (mAttached && mAnim != null) {
43503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim.stop();
44503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        }
45503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        if (drawable instanceof AnimationDrawable) {
46503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim = (AnimationDrawable)drawable;
471e7277e20465be39e30d7e84192c40c4c7b55f89Joe Onorato            if (isShown()) {
48503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato                mAnim.start();
49503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            }
50503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        } else {
51503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato            mAnim = null;
52503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        }
53503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
54503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
55503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
56503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void setImageDrawable(Drawable drawable) {
57503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.setImageDrawable(drawable);
58503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        updateAnim();
59503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
60503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
61503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
62503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @android.view.RemotableViewMethod
63503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void setImageResource(int resid) {
64503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.setImageResource(resid);
65503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        updateAnim();
66503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    }
67503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato
68503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    @Override
69503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato    public void onAttachedToWindow() {
70503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        super.onAttachedToWindow();
71503007dd023668b1e45de948d3673e594d7f5a82Joe Onorato        mAttached = true;
72258384aff260270f58bf397329c26b637dd03766Daniel Bateman        updateAnim();
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