diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java index 537ca08f49fcc..5efc9241a494b 100644 --- a/services/core/java/com/android/server/wm/Dimmer.java +++ b/services/core/java/com/android/server/wm/Dimmer.java @@ -382,8 +382,8 @@ class Dimmer { @Override public void apply(SurfaceControl.Transaction t, SurfaceControl sc, long currentPlayTime) { - float alpha = ((float) currentPlayTime / getDuration()) * (mToAlpha - mFromAlpha) - + mFromAlpha; + final float fraction = getFraction(currentPlayTime); + final float alpha = fraction * (mToAlpha - mFromAlpha) + mFromAlpha; t.setAlpha(sc, alpha); } diff --git a/services/core/java/com/android/server/wm/LocalAnimationAdapter.java b/services/core/java/com/android/server/wm/LocalAnimationAdapter.java index 7c1a6161236af..f0629fa953fc1 100644 --- a/services/core/java/com/android/server/wm/LocalAnimationAdapter.java +++ b/services/core/java/com/android/server/wm/LocalAnimationAdapter.java @@ -130,6 +130,16 @@ class LocalAnimationAdapter implements AnimationAdapter { */ default boolean needsEarlyWakeup() { return false; } + /** + * @return The fraction of the animation, returns 1 if duration is 0. + * + * @param currentPlayTime The current play time. + */ + default float getFraction(float currentPlayTime) { + final float duration = getDuration(); + return duration > 0 ? currentPlayTime / duration : 1.0f; + } + void dump(PrintWriter pw, String prefix); default void dumpDebug(ProtoOutputStream proto, long fieldId) { diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index 86e0818545978..90936efe67157 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -646,8 +646,8 @@ class ScreenRotationAnimation { @Override public void apply(SurfaceControl.Transaction t, SurfaceControl leash, long currentPlayTime) { - float fraction = (float)currentPlayTime / (float)getDuration(); - int color = (Integer) va.evaluate(fraction, startColor, endColor); + final float fraction = getFraction(currentPlayTime); + final int color = (Integer) va.evaluate(fraction, startColor, endColor); Color middleColor = Color.valueOf(color); rgbTmpFloat[0] = middleColor.red(); rgbTmpFloat[1] = middleColor.green(); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 706dcba31cfeb..912fdbf0a4cac 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5595,7 +5595,7 @@ class WindowState extends WindowContainer implements WindowManagerP @Override public void apply(Transaction t, SurfaceControl leash, long currentPlayTime) { - final float fraction = (float) currentPlayTime / getDuration(); + final float fraction = getFraction(currentPlayTime); final float v = mInterpolator.getInterpolation(fraction); t.setPosition(leash, mFrom.x + (mTo.x - mFrom.x) * v, mFrom.y + (mTo.y - mFrom.y) * v);