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