Program: 199024
Project: 199024
Buggy source:
/** 
 * Start an animation to the given viewState
 */
private void startAnimations(final ExpandableView child,StackScrollState.ViewState viewState,StackScrollState finalState){
  int childVisibility=child.getVisibility();
  boolean wasVisible=childVisibility == View.VISIBLE;
  final float alpha=viewState.alpha;
  if (!wasVisible && alpha != 0 && !viewState.gone) {
    child.setVisibility(View.VISIBLE);
  }
  boolean yTranslationChanging=child.getTranslationY() != viewState.yTranslation;
  boolean zTranslationChanging=child.getTranslationZ() != viewState.zTranslation;
  boolean scaleChanging=child.getScaleX() != viewState.scale;
  boolean alphaChanging=alpha != child.getAlpha();
  boolean heightChanging=viewState.height != child.getActualHeight();
  boolean topInsetChanging=viewState.clipTopAmount != child.getClipTopAmount();
  boolean wasAdded=mNewAddChildren.contains(child);
  boolean hasDelays=mAnimationFilter.hasDelays;
  boolean isDelayRelevant=yTranslationChanging || zTranslationChanging || scaleChanging|| alphaChanging|| heightChanging|| topInsetChanging;
  long delay=0;
  if (hasDelays && isDelayRelevant || wasAdded) {
    delay=calculateChildAnimationDelay(viewState,finalState);
  }
  if (yTranslationChanging) {
    startYTranslationAnimation(child,viewState,delay);
  }
  if (zTranslationChanging) {
    startZTranslationAnimation(child,viewState,delay);
  }
  if (scaleChanging) {
    startScaleAnimation(child,viewState);
  }
  if (alphaChanging) {
    startAlphaAnimation(child,viewState,delay);
  }
  if (heightChanging) {
    startHeightAnimation(child,viewState,delay);
  }
  if (topInsetChanging) {
    startInsetAnimation(child,viewState,delay);
  }
  child.setDimmed(viewState.dimmed,mAnimationFilter.animateDimmed);
  child.setDark(viewState.dark,mAnimationFilter.animateDark);
  child.setScrimAmount(viewState.scrimAmount);
  if (wasAdded) {
    child.performAddAnimation(delay);
  }
}

Fixed version (ground truth):
/** 
 * Start an animation to the given viewState
 */
private void startAnimations(final ExpandableView child,StackScrollState.ViewState viewState,StackScrollState finalState){
  int childVisibility=child.getVisibility();
  boolean wasVisible=childVisibility == View.VISIBLE;
  final float alpha=viewState.alpha;
  if (!wasVisible && alpha != 0 && !viewState.gone) {
    child.setVisibility(View.VISIBLE);
  }
  boolean yTranslationChanging=child.getTranslationY() != viewState.yTranslation;
  boolean zTranslationChanging=child.getTranslationZ() != viewState.zTranslation;
  boolean scaleChanging=child.getScaleX() != viewState.scale;
  boolean alphaChanging=alpha != child.getAlpha();
  boolean heightChanging=viewState.height != child.getActualHeight();
  boolean topInsetChanging=viewState.clipTopAmount != child.getClipTopAmount();
  boolean wasAdded=mNewAddChildren.contains(child);
  boolean hasDelays=mAnimationFilter.hasDelays;
  boolean isDelayRelevant=yTranslationChanging || zTranslationChanging || scaleChanging|| alphaChanging|| heightChanging|| topInsetChanging;
  long delay=0;
  if (hasDelays && isDelayRelevant || wasAdded) {
    delay=calculateChildAnimationDelay(viewState,finalState);
  }
  if (yTranslationChanging) {
    startYTranslationAnimation(child,viewState,delay);
  }
  if (zTranslationChanging) {
    startZTranslationAnimation(child,viewState,delay);
  }
  if (scaleChanging) {
    startScaleAnimation(child,viewState);
  }
  if (alphaChanging) {
    startAlphaAnimation(child,viewState,delay);
  }
  if (heightChanging) {
    startHeightAnimation(child,viewState,delay);
  }
  if (topInsetChanging) {
    startInsetAnimation(child,viewState,delay);
  }
  child.setDimmed(viewState.dimmed,mAnimationFilter.animateDimmed && !wasAdded);
  child.setDark(viewState.dark,mAnimationFilter.animateDark);
  child.setScrimAmount(viewState.scrimAmount);
  if (wasAdded) {
    child.performAddAnimation(delay);
  }
}