Program: 54147
Project: 54147
Buggy source:
private static void sceneChangeRunTransition(final ViewGroup sceneRoot,final Transition transition){
  if (transition != null && isTransitionsAllowed()) {
    ViewGroupOverlayUtils.addOverlayIfNeeded(sceneRoot);
    final ViewTreeObserver observer=sceneRoot.getViewTreeObserver();
    final ViewTreeObserver.OnPreDrawListener listener=new ViewTreeObserver.OnPreDrawListener(){
      public boolean onPreDraw(){
        sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
        sPendingTransitions.remove(sceneRoot);
        final ArrayMap<ViewGroup,ArrayList<Transition>> runningTransitions=getRunningTransitions();
        ArrayList<Transition> currentTransitions=runningTransitions.get(sceneRoot);
        ArrayList<Transition> previousRunningTransitions=null;
        if (currentTransitions == null) {
          currentTransitions=new ArrayList<Transition>();
          runningTransitions.put(sceneRoot,currentTransitions);
        }
 else         if (currentTransitions.size() > 0) {
          previousRunningTransitions=new ArrayList<Transition>(currentTransitions);
        }
        currentTransitions.add(transition);
        transition.addListener(new Transition.TransitionListenerAdapter(){
          @Override public void onTransitionEnd(          Transition transition){
            ArrayList<Transition> currentTransitions=runningTransitions.get(sceneRoot);
            currentTransitions.remove(transition);
          }
        }
);
        transition.captureValues(sceneRoot,false);
        if (previousRunningTransitions != null) {
          for (          Transition runningTransition : previousRunningTransitions) {
            runningTransition.resume(sceneRoot);
          }
        }
        transition.playTransition(sceneRoot);
        return true;
      }
    }
;
    observer.addOnPreDrawListener(listener);
  }
}

Fixed version (ground truth):
private static void sceneChangeRunTransition(final ViewGroup sceneRoot,final Transition transition){
  if (transition != null && isTransitionsAllowed()) {
    ViewGroupOverlayUtils.addOverlayIfNeeded(sceneRoot);
    final ViewTreeObserver observer=sceneRoot.getViewTreeObserver();
    final ViewTreeObserver.OnPreDrawListener listener=new ViewTreeObserver.OnPreDrawListener(){
      public boolean onPreDraw(){
        sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
        sPendingTransitions.remove(sceneRoot);
        final ArrayMap<ViewGroup,ArrayList<Transition>> runningTransitions=getRunningTransitions();
        ArrayList<Transition> currentTransitions=runningTransitions.get(sceneRoot);
        ArrayList<Transition> previousRunningTransitions=null;
        if (currentTransitions == null) {
          currentTransitions=new ArrayList<Transition>();
          runningTransitions.put(sceneRoot,currentTransitions);
        }
 else         if (currentTransitions.size() > 0) {
          previousRunningTransitions=new ArrayList<Transition>(currentTransitions);
        }
        currentTransitions.add(transition);
        transition.addListener(new Transition.TransitionListenerAdapter(){
          @Override public void onTransitionEnd(          Transition transition){
            ArrayList<Transition> currentTransitions=runningTransitions.get(sceneRoot);
            currentTransitions.remove(transition);
            transition.onEndOfAllTransitions();
          }
        }
);
        transition.captureValues(sceneRoot,false);
        if (previousRunningTransitions != null) {
          for (          Transition runningTransition : previousRunningTransitions) {
            runningTransition.resume(sceneRoot);
          }
        }
        transition.playTransition(sceneRoot);
        return true;
      }
    }
;
    observer.addOnPreDrawListener(listener);
  }
}