Prevent divided by zero if animation is disable
Developer could disable window animation in developer options, but it could lead to system crash because the transform values may divid duration time which is set to zero. Bug: 154894010 Test: disable animation, open simlated display, resize Change-Id: I550c309d9f684e2a5a50b4d6812703dd20a179b5
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -5595,7 +5595,7 @@ class WindowState extends WindowContainer<WindowState> 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);
|
||||
|
||||
Reference in New Issue
Block a user