Fixed the motion when expanding notification groups

Also fixed that a notification was expanded when the velocity
was actually heading the other way.

Bug: 24866646
Change-Id: I419eb6d35173729e8b6b8f76961b75a12e2ae93b
This commit is contained in:
Selim Cinek
2016-03-11 18:25:05 -08:00
parent 821d6a7735
commit d191a1789e

View File

@@ -535,31 +535,43 @@ public class ExpandHelper implements Gefingerpoken {
boolean nowExpanded;
int naturalHeight = mScaler.getNaturalHeight();
if (wasClosed) {
nowExpanded = (force || currentHeight > mOldHeight);
nowExpanded = (force || currentHeight > mOldHeight && velocity >= 0);
} else {
nowExpanded = !force && currentHeight >= mOldHeight;
nowExpanded = !force && (currentHeight >= mOldHeight || velocity > 0);
}
nowExpanded |= mNaturalHeight == mSmallSize;
if (mScaleAnimation.isRunning()) {
mScaleAnimation.cancel();
}
mCallback.setUserExpandedChild(mResizedView, nowExpanded);
mCallback.expansionStateChanged(false);
float targetHeight = nowExpanded ? naturalHeight : mSmallSize;
if (targetHeight != currentHeight) {
mScaleAnimation.setFloatValues(targetHeight);
mScaleAnimation.setupStartValues();
final View scaledView = mResizedView;
final boolean expand = nowExpanded;
mScaleAnimation.addListener(new AnimatorListenerAdapter() {
public boolean mCancelled;
@Override
public void onAnimationEnd(Animator animation) {
if (!mCancelled) {
mCallback.setUserExpandedChild(scaledView, expand);
}
mCallback.setUserLockedChild(scaledView, false);
mScaleAnimation.removeListener(this);
}
@Override
public void onAnimationCancel(Animator animation) {
mCancelled = true;
}
});
velocity = nowExpanded == velocity >= 0 ? velocity : 0;
mFlingAnimationUtils.apply(mScaleAnimation, currentHeight, targetHeight, velocity);
mScaleAnimation.start();
} else {
mCallback.setUserExpandedChild(mResizedView, nowExpanded);
mCallback.setUserLockedChild(mResizedView, false);
}