Merge "Fixed NaN exceptions in EdgeEffect" into sc-dev
diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java
index 1951194..ae426d2 100644
--- a/core/java/android/widget/EdgeEffect.java
+++ b/core/java/android/widget/EdgeEffect.java
@@ -626,20 +626,31 @@
// assume rotations of increments of 90 degrees
float x = mTmpPoints[10] - mTmpPoints[8];
float width = right - left;
- float vecX = dampStretchVector(Math.max(-1f, Math.min(1f, x / width)));
+ float vecX = 0f;
+ if (width > 0) {
+ vecX = dampStretchVector(Math.max(-1f, Math.min(1f, x / width)));
+ }
+
float y = mTmpPoints[11] - mTmpPoints[9];
float height = bottom - top;
- float vecY = dampStretchVector(Math.max(-1f, Math.min(1f, y / height)));
- renderNode.stretch(
- left,
- top,
- right,
- bottom,
- vecX,
- vecY,
- mWidth,
- mHeight
- );
+ float vecY = 0f;
+ if (height > 0) {
+ vecY = dampStretchVector(Math.max(-1f, Math.min(1f, y / height)));
+ }
+
+ boolean hasStretchVectors = Float.compare(vecX, 0) != 0 || Float.compare(vecY, 0) != 0;
+ if (right > left && bottom > top && mWidth > 0 && mHeight > 0 && hasStretchVectors) {
+ renderNode.stretch(
+ left,
+ top,
+ right,
+ bottom,
+ vecX,
+ vecY,
+ mWidth,
+ mHeight
+ );
+ }
} else {
// This is TYPE_STRETCH and drawing into a Canvas that isn't a Recording Canvas,
// so no effect can be shown. Just end the effect.