summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-08-27 20:04:27 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-27 20:04:28 +0000
commit719da6ba9b7f8b67c61479466919ecef0dd1cb79 (patch)
tree060ead54c896aae5d2642f71f57dcb64de46f21c /graphics/java
parent12c75ab73003ffc1706364041db42fa238ae6f15 (diff)
parent40e38d43675b9baa4383058e5afd5291291abc81 (diff)
downloadframeworks_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.java24
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();