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