Program: 191285
Project: 191285
Buggy source:
private void startYTranslationAnimation(final View child,ViewState viewState,long duration,long delay){
  Float previousStartValue=getChildTag(child,TAG_START_TRANSLATION_Y);
  Float previousEndValue=getChildTag(child,TAG_END_TRANSLATION_Y);
  float newEndValue=viewState.yTranslation;
  if (previousEndValue != null && previousEndValue == newEndValue) {
    return;
  }
  ObjectAnimator previousAnimator=getChildTag(child,TAG_ANIMATOR_TRANSLATION_Y);
  if (!mAnimationFilter.animateY) {
    if (previousAnimator != null) {
      PropertyValuesHolder[] values=previousAnimator.getValues();
      float relativeDiff=newEndValue - previousEndValue;
      float newStartValue=previousStartValue + relativeDiff;
      values[0].setFloatValues(newStartValue,newEndValue);
      child.setTag(TAG_START_TRANSLATION_Y,newStartValue);
      child.setTag(TAG_END_TRANSLATION_Y,newEndValue);
      previousAnimator.setCurrentPlayTime(previousAnimator.getCurrentPlayTime());
      return;
    }
 else {
      child.setTranslationY(newEndValue);
      return;
    }
  }
  ObjectAnimator animator=ObjectAnimator.ofFloat(child,View.TRANSLATION_Y,child.getTranslationY(),newEndValue);
  Interpolator interpolator=mHeadsUpAppearChildren.contains(child) ? mHeadsUpAppearInterpolator : Interpolators.FAST_OUT_SLOW_IN;
  animator.setInterpolator(interpolator);
  long newDuration=cancelAnimatorAndGetNewDuration(duration,previousAnimator);
  animator.setDuration(newDuration);
  if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
    animator.setStartDelay(delay);
  }
  animator.addListener(getGlobalAnimationFinishedListener());
  animator.addListener(new AnimatorListenerAdapter(){
    @Override public void onAnimationEnd(    Animator animation){
      HeadsUpManager.setIsClickedNotification(child,false);
      child.setTag(TAG_ANIMATOR_TRANSLATION_Y,null);
      child.setTag(TAG_START_TRANSLATION_Y,null);
      child.setTag(TAG_END_TRANSLATION_Y,null);
    }
  }
);
  startAnimator(animator);
  child.setTag(TAG_ANIMATOR_TRANSLATION_Y,animator);
  child.setTag(TAG_START_TRANSLATION_Y,child.getTranslationY());
  child.setTag(TAG_END_TRANSLATION_Y,newEndValue);
}

Fixed version (ground truth):
private void startYTranslationAnimation(final View child,ViewState viewState,long duration,long delay){
  Float previousStartValue=getChildTag(child,TAG_START_TRANSLATION_Y);
  Float previousEndValue=getChildTag(child,TAG_END_TRANSLATION_Y);
  float newEndValue=viewState.yTranslation;
  if (previousEndValue != null && previousEndValue == newEndValue) {
    return;
  }
  ObjectAnimator previousAnimator=getChildTag(child,TAG_ANIMATOR_TRANSLATION_Y);
  if (!mAnimationFilter.animateY) {
    if (previousAnimator != null) {
      PropertyValuesHolder[] values=previousAnimator.getValues();
      float relativeDiff=newEndValue - previousEndValue;
      float newStartValue=previousStartValue + relativeDiff;
      values[0].setFloatValues(newStartValue,newEndValue);
      child.setTag(TAG_START_TRANSLATION_Y,newStartValue);
      child.setTag(TAG_END_TRANSLATION_Y,newEndValue);
      previousAnimator.setCurrentPlayTime(previousAnimator.getCurrentPlayTime());
      return;
    }
 else {
      child.setTranslationY(newEndValue);
      return;
    }
  }
  ObjectAnimator animator=ObjectAnimator.ofFloat(child,View.TRANSLATION_Y,child.getTranslationY(),newEndValue);
  Interpolator interpolator=mHeadsUpAppearChildren.contains(child) ? mHeadsUpAppearInterpolator : Interpolators.FAST_OUT_SLOW_IN;
  animator.setInterpolator(interpolator);
  long newDuration=cancelAnimatorAndGetNewDuration(duration,previousAnimator);
  animator.setDuration(newDuration);
  if (delay > 0 && (previousAnimator == null || !previousAnimator.isRunning())) {
    animator.setStartDelay(delay);
  }
  animator.addListener(getGlobalAnimationFinishedListener());
  final boolean isHeadsUpDisappear=mHeadsUpDisappearChildren.contains(child);
  animator.addListener(new AnimatorListenerAdapter(){
    @Override public void onAnimationEnd(    Animator animation){
      HeadsUpManager.setIsClickedNotification(child,false);
      child.setTag(TAG_ANIMATOR_TRANSLATION_Y,null);
      child.setTag(TAG_START_TRANSLATION_Y,null);
      child.setTag(TAG_END_TRANSLATION_Y,null);
      if (isHeadsUpDisappear) {
        ((ExpandableNotificationRow)child).setHeadsupDisappearRunning(false);
      }
    }
  }
);
  startAnimator(animator);
  child.setTag(TAG_ANIMATOR_TRANSLATION_Y,animator);
  child.setTag(TAG_START_TRANSLATION_Y,child.getTranslationY());
  child.setTag(TAG_END_TRANSLATION_Y,newEndValue);
}