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; 2382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chungimport android.widget.ImageView; 2482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 2582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung/** 2682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * This is an optimized ImageView that does not trigger a requestLayout() or invalidate() when 2782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung * setting the image to Null. 2882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung */ 2982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chungpublic class FixedSizeImageView extends ImageView { 3082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 3182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung boolean mAllowRelayout = true; 3282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung boolean mAllowInvalidate = true; 3382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 3482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context) { 3582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung this(context, null); 3682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 3782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 3882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context, AttributeSet attrs) { 3982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung this(context, attrs, 0); 4082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 4182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 4282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context, AttributeSet attrs, int defStyleAttr) { 4382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung this(context, attrs, defStyleAttr, 0); 4482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 4582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 4682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public FixedSizeImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 4782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super(context, attrs, defStyleAttr, defStyleRes); 4882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 4982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 5082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung @Override 5182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public void requestLayout() { 5282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung if (mAllowRelayout) { 5382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super.requestLayout(); 5482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 5582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 5682c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 5782c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung @Override 5882c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public void invalidate() { 5982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung if (mAllowInvalidate) { 6082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super.invalidate(); 6182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 6282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 6382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung 6482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung @Override 6582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung public void setImageDrawable(Drawable drawable) { 66dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung boolean isNullBitmapDrawable = (drawable instanceof BitmapDrawable) && 67dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung (((BitmapDrawable) drawable).getBitmap() == null); 68dcfa7976fa836ae90bb4a579892a18a0abf35b3cWinson Chung if (drawable == null || isNullBitmapDrawable) { 6982c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowRelayout = false; 7082c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowInvalidate = false; 7182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 7282c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung super.setImageDrawable(drawable); 7382c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowRelayout = true; 7482c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung mAllowInvalidate = true; 7582c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung } 7688f3db9e2180be5e2d3c524b9f1dd99e05465041Jorim Jaggi 7788f3db9e2180be5e2d3c524b9f1dd99e05465041Jorim Jaggi @Override 7888f3db9e2180be5e2d3c524b9f1dd99e05465041Jorim Jaggi public boolean hasOverlappingRendering() { 7988f3db9e2180be5e2d3c524b9f1dd99e05465041Jorim Jaggi return false; 8088f3db9e2180be5e2d3c524b9f1dd99e05465041Jorim Jaggi } 8182c8c5e9872b984ba6f43b01da0c7731fd5bf762Winson Chung} 82