summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LogDecelerateInterpolator.java
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2016-05-03 16:03:46 -0700
committerTony Wickham <twickham@google.com>2016-05-04 00:21:45 +0000
commitbd42ba73b23d0470b675af73a721fc1d019be39d (patch)
treefb54a4a6f49ade89c877817b67a3f28104754273 /src/com/android/launcher3/LogDecelerateInterpolator.java
parentf9a13f7cf859443f7dde4c0179defaafc45ef44f (diff)
downloadandroid_packages_apps_Trebuchet-bd42ba73b23d0470b675af73a721fc1d019be39d.tar.gz
android_packages_apps_Trebuchet-bd42ba73b23d0470b675af73a721fc1d019be39d.tar.bz2
android_packages_apps_Trebuchet-bd42ba73b23d0470b675af73a721fc1d019be39d.zip
Return 1f in Log(Ac/De)celerateInterpolators on a 1f input.
In battery saver mode, animations skip directly to the final values. For LogDecelerateInterpolator, however, an input of 1f outputs an interpolated 0.99999994. This meant that the FirstFrameAnimatorHelper didn't realize that this was the last frame, and messed things up. Since any interpolator should return 1 on an input of 1, we just short-circuit in that case for the log interpolators. Bug: 25666809 Change-Id: I60527e3758cea383fbcf50acb95460a7bd9ab43c (cherry picked from commit 8dd24099233c8a2e3e94350a23e4880f3aa89c28)
Diffstat (limited to 'src/com/android/launcher3/LogDecelerateInterpolator.java')
-rw-r--r--src/com/android/launcher3/LogDecelerateInterpolator.java4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/com/android/launcher3/LogDecelerateInterpolator.java b/src/com/android/launcher3/LogDecelerateInterpolator.java
index 4c5f6f08c..7d9528280 100644
--- a/src/com/android/launcher3/LogDecelerateInterpolator.java
+++ b/src/com/android/launcher3/LogDecelerateInterpolator.java
@@ -21,6 +21,8 @@ public class LogDecelerateInterpolator implements TimeInterpolator {
@Override
public float getInterpolation(float t) {
- return computeLog(t, mBase, mDrift) * mLogScale;
+ // Due to rounding issues, the interpolation doesn't quite reach 1 even though it should.
+ // To account for this, we short-circuit to return 1 if the input is 1.
+ return Float.compare(t, 1f) == 0 ? 1f : computeLog(t, mBase, mDrift) * mLogScale;
}
}