summaryrefslogtreecommitdiff
path: root/core/java/android/widget/ImageView.java
diff options
context:
space:
mode:
authorNader Jawad <njawad@google.com>2018-04-20 15:56:10 -0700
committerNader Jawad <njawad@google.com>2018-04-23 16:00:49 -0700
commite6a6321a928a423bcd881b66e2f5ec2cfabc6e76 (patch)
tree5447f38cc27069ceeb00156c4497025369631894 /core/java/android/widget/ImageView.java
parentbccd17118982e8c47be9b95d8f6597181e7d5091 (diff)
Removed applyColorMod method in favor of individually setting
properties. Created dedicated applyXfermode, applyColorFilter and applyAlpha methods to ensure that properties are not being overwritten unnecessarily Fixes: 30167384 Test: Re-ran atest CtsWidgeTestCases:ImageViewTest Change-Id: Ie4a18172dbf222559ace1b740a6c6fdfe33f4dfe
Diffstat (limited to 'core/java/android/widget/ImageView.java')
-rw-r--r--core/java/android/widget/ImageView.java41
1 files changed, 25 insertions, 16 deletions
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 13729874d369..b12e854fb20c 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -109,9 +109,10 @@ public class ImageView extends View {
private ColorFilter mColorFilter = null;
private boolean mHasColorFilter = false;
private Xfermode mXfermode;
+ private boolean mHasXfermode = false;
private int mAlpha = 255;
+ private boolean mHasAlpha = false;
private final int mViewAlphaScale = 256;
- private boolean mColorMod = false;
private Drawable mDrawable = null;
private BitmapDrawable mRecycleableBitmapDrawable = null;
@@ -1007,7 +1008,9 @@ public class ImageView extends View {
mDrawableWidth = d.getIntrinsicWidth();
mDrawableHeight = d.getIntrinsicHeight();
applyImageTint();
- applyColorMod();
+ applyColorFilter();
+ applyAlpha();
+ applyXfermode();
configureBounds();
} else {
@@ -1462,8 +1465,8 @@ public class ImageView extends View {
public final void setXfermode(Xfermode mode) {
if (mXfermode != mode) {
mXfermode = mode;
- mColorMod = true;
- applyColorMod();
+ mHasXfermode = true;
+ applyXfermode();
invalidate();
}
}
@@ -1490,8 +1493,7 @@ public class ImageView extends View {
if (mColorFilter != cf) {
mColorFilter = cf;
mHasColorFilter = true;
- mColorMod = true;
- applyColorMod();
+ applyColorFilter();
invalidate();
}
}
@@ -1535,22 +1537,29 @@ public class ImageView extends View {
alpha &= 0xFF; // keep it legal
if (mAlpha != alpha) {
mAlpha = alpha;
- mColorMod = true;
- applyColorMod();
+ mHasAlpha = true;
+ applyAlpha();
invalidate();
}
}
- private void applyColorMod() {
- // Only mutate and apply when modifications have occurred. This should
- // not reset the mColorMod flag, since these filters need to be
- // re-applied if the Drawable is changed.
- if (mDrawable != null && mColorMod) {
+ private void applyXfermode() {
+ if (mDrawable != null && mHasXfermode) {
mDrawable = mDrawable.mutate();
- if (mHasColorFilter) {
- mDrawable.setColorFilter(mColorFilter);
- }
mDrawable.setXfermode(mXfermode);
+ }
+ }
+
+ private void applyColorFilter() {
+ if (mDrawable != null && mHasColorFilter) {
+ mDrawable = mDrawable.mutate();
+ mDrawable.setColorFilter(mColorFilter);
+ }
+ }
+
+ private void applyAlpha() {
+ if (mDrawable != null && mHasAlpha) {
+ mDrawable = mDrawable.mutate();
mDrawable.setAlpha(mAlpha * mViewAlphaScale >> 8);
}
}