diff options
author | Alan Viverette <alanv@google.com> | 2014-08-27 20:04:27 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-27 20:04:28 +0000 |
commit | 719da6ba9b7f8b67c61479466919ecef0dd1cb79 (patch) | |
tree | 060ead54c896aae5d2642f71f57dcb64de46f21c /graphics/java | |
parent | 12c75ab73003ffc1706364041db42fa238ae6f15 (diff) | |
parent | 40e38d43675b9baa4383058e5afd5291291abc81 (diff) | |
download | frameworks_base-719da6ba9b7f8b67c61479466919ecef0dd1cb79.zip frameworks_base-719da6ba9b7f8b67c61479466919ecef0dd1cb79.tar.gz frameworks_base-719da6ba9b7f8b67c61479466919ecef0dd1cb79.tar.bz2 |
Merge "Fix NPE in RippleDrawable" into lmp-dev
Diffstat (limited to 'graphics/java')
-rw-r--r-- | graphics/java/android/graphics/drawable/RippleDrawable.java | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index ca32751..7402bdb 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -33,7 +33,6 @@ import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.util.AttributeSet; import android.util.DisplayMetrics; -import android.util.Log; import com.android.internal.R; @@ -41,6 +40,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; +import java.util.Arrays; /** * Drawable that shows a ripple effect in response to state changes. The @@ -88,7 +88,6 @@ import java.io.IOException; * @attr ref android.R.styleable#RippleDrawable_color */ public class RippleDrawable extends LayerDrawable { - private static final String LOG_TAG = RippleDrawable.class.getSimpleName(); private static final PorterDuffXfermode DST_IN = new PorterDuffXfermode(Mode.DST_IN); private static final PorterDuffXfermode SRC_ATOP = new PorterDuffXfermode(Mode.SRC_ATOP); private static final PorterDuffXfermode SRC_OVER = new PorterDuffXfermode(Mode.SRC_OVER); @@ -215,10 +214,14 @@ public class RippleDrawable extends LayerDrawable { final Ripple[] ripples = mAnimatingRipples; for (int i = 0; i < count; i++) { ripples[i].jump(); - ripples[i] = null; + } + if (ripples != null) { + Arrays.fill(ripples, 0, count, null); } mAnimatingRipplesCount = 0; mClearingHotspots = false; + + invalidateSelf(); } @Override @@ -549,6 +552,15 @@ public class RippleDrawable extends LayerDrawable { mAnimatingRipples[mAnimatingRipplesCount++] = mRipple; } + @Override + public void invalidateSelf() { + // Don't invalidate when we're clearing hotspots. We'll handle that + // manually when we're done. + if (!mClearingHotspots) { + super.invalidateSelf(); + } + } + private void removeRipple() { if (mRipple != null) { mRipple.exit(); @@ -572,7 +584,9 @@ public class RippleDrawable extends LayerDrawable { final Ripple[] ripples = mAnimatingRipples; for (int i = 0; i < count; i++) { ripples[i].cancel(); - ripples[i] = null; + } + if (ripples != null) { + Arrays.fill(ripples, 0, count, null); } mAnimatingRipplesCount = 0; mClearingHotspots = false; @@ -680,7 +694,7 @@ public class RippleDrawable extends LayerDrawable { final int count = mAnimatingRipplesCount; final int index = getRippleIndex(ripple); if (index >= 0) { - System.arraycopy(ripples, index + 1, ripples, index + 1 - 1, count - (index + 1)); + System.arraycopy(ripples, index + 1, ripples, index, count - (index + 1)); ripples[count - 1] = null; mAnimatingRipplesCount--; invalidateSelf(); |