Fix a couple issues with swiping up from home

- Don't update the animation to go from 0 to 1; instead, update the
  interpolator to clamp to the remaining progress (b/79773309)
- Fix NPE that can happen in a race between the atomic animation
  ending and the non-atomic animation canceling/ending

Change-Id: I313251dc5cbd7b931b043fc3e840bb4ab368a790
This commit is contained in:
Tony Wickham 2018-05-17 16:30:46 -07:00
parent 48059dc706
commit 7de574175b
2 changed files with 9 additions and 13 deletions

View File

@ -189,14 +189,8 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr
if (isFling && expectedDuration != 0) { if (isFling && expectedDuration != 0) {
// Update all apps interpolator to add a bit of overshoot starting from currFraction // Update all apps interpolator to add a bit of overshoot starting from currFraction
final float currFraction = mCurrentAnimation.getProgressFraction(); final float currFraction = mCurrentAnimation.getProgressFraction();
mAllAppsInterpolatorWrapper.baseInterpolator mAllAppsInterpolatorWrapper.baseInterpolator = Interpolators.clampToProgress(
= new OvershootInterpolator(Math.min(Math.abs(velocity) / 3, 3f)) { new OvershootInterpolator(Math.min(Math.abs(velocity), 3f)), currFraction, 1);
@Override
public float getInterpolation(float t) {
return super.getInterpolation(t) + ((1 - t) * currFraction);
}
};
animator.setFloatValues(0, 1);
animator.setDuration(Math.min(expectedDuration, ATOMIC_DURATION)) animator.setDuration(Math.min(expectedDuration, ATOMIC_DURATION))
.setInterpolator(LINEAR); .setInterpolator(LINEAR);
} }

View File

@ -209,11 +209,13 @@ public abstract class AbstractStateChangeTouchController
@Override @Override
public void onAnimationSuccess(Animator animation) { public void onAnimationSuccess(Animator animation) {
cancelAtomicComponentsController(); cancelAtomicComponentsController();
mAtomicComponentsStartProgress = mCurrentAnimation.getProgressFraction(); if (mCurrentAnimation != null) {
long duration = (long) (getShiftRange() * 2); mAtomicComponentsStartProgress = mCurrentAnimation.getProgressFraction();
mAtomicComponentsController = AnimatorPlaybackController.wrap( long duration = (long) (getShiftRange() * 2);
createAtomicAnimForState(mFromState, mToState, duration), duration); mAtomicComponentsController = AnimatorPlaybackController.wrap(
mAtomicComponentsController.dispatchOnStart(); createAtomicAnimForState(mFromState, mToState, duration), duration);
mAtomicComponentsController.dispatchOnStart();
}
} }
}); });
} }