From a479a3268f5fd63d1dc414b33545473aef3c75a1 Mon Sep 17 00:00:00 2001 From: George Mount Date: Tue, 16 Mar 2021 20:26:50 +0000 Subject: [PATCH] Fix bug in EdgeEffect with glow Fixes: 182499389 With the glow edge effect, using the drag gesture to reduce the edge glow could cause the glow to flip and repeat. This was caused by the update() modifying the determined distance during the pull when it wasn't animating. We also force the alpha to be 0 if the pull distance is 0. Test: manual testing Change-Id: Iacc1df0fcb92e3380523187badf7ea62d7d19d2f --- core/java/android/widget/EdgeEffect.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java index c203c7903256a..801d960e354ce 100644 --- a/core/java/android/widget/EdgeEffect.java +++ b/core/java/android/widget/EdgeEffect.java @@ -354,13 +354,14 @@ public class EdgeEffect { mDistance = Math.max(0f, mPullDistance); mVelocity = 0; - final float absdd = Math.abs(deltaDistance); - mGlowAlpha = mGlowAlphaStart = Math.min(MAX_ALPHA, - mGlowAlpha + (absdd * PULL_DISTANCE_ALPHA_GLOW_FACTOR)); - if (mPullDistance == 0) { mGlowScaleY = mGlowScaleYStart = 0; + mGlowAlpha = mGlowAlphaStart = 0; } else { + final float absdd = Math.abs(deltaDistance); + mGlowAlpha = mGlowAlphaStart = Math.min(MAX_ALPHA, + mGlowAlpha + (absdd * PULL_DISTANCE_ALPHA_GLOW_FACTOR)); + final float scale = (float) (Math.max(0, 1 - 1 / Math.sqrt(Math.abs(mPullDistance) * mBounds.height()) - 0.3d) / 0.7d); @@ -698,7 +699,9 @@ public class EdgeEffect { mGlowAlpha = mGlowAlphaStart + (mGlowAlphaFinish - mGlowAlphaStart) * interp; mGlowScaleY = mGlowScaleYStart + (mGlowScaleYFinish - mGlowScaleYStart) * interp; - mDistance = calculateDistanceFromGlowValues(mGlowScaleY, mGlowAlpha); + if (mState != STATE_PULL) { + mDistance = calculateDistanceFromGlowValues(mGlowScaleY, mGlowAlpha); + } mDisplacement = (mDisplacement + mTargetDisplacement) / 2; if (t >= 1.f - EPSILON) {