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