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) {
// Update all apps interpolator to add a bit of overshoot starting from currFraction
final float currFraction = mCurrentAnimation.getProgressFraction();
mAllAppsInterpolatorWrapper.baseInterpolator
= new OvershootInterpolator(Math.min(Math.abs(velocity) / 3, 3f)) {
@Override
public float getInterpolation(float t) {
return super.getInterpolation(t) + ((1 - t) * currFraction);
}
};
animator.setFloatValues(0, 1);
mAllAppsInterpolatorWrapper.baseInterpolator = Interpolators.clampToProgress(
new OvershootInterpolator(Math.min(Math.abs(velocity), 3f)), currFraction, 1);
animator.setDuration(Math.min(expectedDuration, ATOMIC_DURATION))
.setInterpolator(LINEAR);
}

View File

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