182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung/* 282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * Copyright (C) 2014 The Android Open Source Project 382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * 482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * Licensed under the Apache License, Version 2.0 (the "License"); 582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * you may not use this file except in compliance with the License. 682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * You may obtain a copy of the License at 782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * 882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * http://www.apache.org/licenses/LICENSE-2.0 982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * 1082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * Unless required by applicable law or agreed to in writing, software 1182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * distributed under the License is distributed on an "AS IS" BASIS, 1282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * See the License for the specific language governing permissions and 1482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * limitations under the License. 1582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung */ 1682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 1782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chungpackage com.android.systemui.recents.views; 1882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 1982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chungimport android.content.Context; 20dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chungimport android.graphics.drawable.BitmapDrawable; 2182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chungimport android.graphics.drawable.Drawable; 2282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chungimport android.util.AttributeSet; 23bbb3d3de3c058f115ab1fba0ddb7238e54745c0bWinson Chung 24bbb3d3de3c058f115ab1fba0ddb7238e54745c0bWinson Chungimport com.android.systemui.statusbar.AlphaOptimizedImageView; 2582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 2682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung/** 273c107166fc1f719f3b94a706fdf52a23b1820761Winson * This is an optimized ImageView that does not trigger a <code>requestLayout()</code> or 283c107166fc1f719f3b94a706fdf52a23b1820761Winson * <code>invalidate()</code> when setting the image to <code>null</code>. 2982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung */ 30bbb3d3de3c058f115ab1fba0ddb7238e54745c0bWinson Chungpublic class FixedSizeImageView extends AlphaOptimizedImageView { 3182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 323c107166fc1f719f3b94a706fdf52a23b1820761Winson private boolean mAllowRelayout = true; 333c107166fc1f719f3b94a706fdf52a23b1820761Winson private boolean mAllowInvalidate = true; 3482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 3582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context) { 3682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung this(context, null); 3782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 3882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 3982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context, AttributeSet attrs) { 4082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung this(context, attrs, 0); 4182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 4282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 4382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context, AttributeSet attrs, int defStyleAttr) { 4482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung this(context, attrs, defStyleAttr, 0); 4582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 4682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 4782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 4882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super(context, attrs, defStyleAttr, defStyleRes); 4982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 5082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 5182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung @Override 5282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public void requestLayout() { 5382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung if (mAllowRelayout) { 5482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super.requestLayout(); 5582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 5682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 5782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 5882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung @Override 5982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public void invalidate() { 6082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung if (mAllowInvalidate) { 6182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super.invalidate(); 6282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 6382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 6482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 6582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung @Override 6682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public void setImageDrawable(Drawable drawable) { 67dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung boolean isNullBitmapDrawable = (drawable instanceof BitmapDrawable) && 68dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung (((BitmapDrawable) drawable).getBitmap() == null); 69dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung if (drawable == null || isNullBitmapDrawable) { 7082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowRelayout = false; 7182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowInvalidate = false; 7282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 7382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super.setImageDrawable(drawable); 7482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowRelayout = true; 7582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowInvalidate = true; 7682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 7782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung} 78