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:
parent
48059dc706
commit
7de574175b
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue