Program: 26180
Project: 26180
Buggy source:
private void refresh(String json){
  if (mDownloadsJson == null)   mDownloadsJson=new DownloadsJson(json);
 else   mDownloadsJson.refresh(json);
  removeAllViews();
  for (int i=0; i < mDownloadsJson.getLength(); i++) {
    DownloadCardViewItem.DDownloadCardView mDownloadCard=new DownloadCardViewItem.DDownloadCardView();
    mDownloadCard.setVersion(mDownloadsJson.getVersion(i));
    mDownloadCard.setMd5sum(mDownloadsJson.getMd5sum(i));
    mDownloadCard.setDownload(mDownloadsJson.getLink(i));
    mDownloadCard.setChangelog(mDownloadsJson.getChangelog(i));
    mDownloadCard.setOnDownloadListener(new DownloadCardViewItem.OnDownloadListener(){
      private boolean installing;
      @Override public void onSuccess(){
        new Thread(new Runnable(){
          @Override public void run(){
            int count=0;
            installing=true;
            while (installing) {
              try {
                count++;
                String title=getString(R.string.installing);
                for (int i=0; i < count; i++)                 title+="String_Node_Str";
                setTextTitle(title);
                if (count >= 5)                 count=0;
                Thread.sleep(500);
              }
 catch (              InterruptedException e) {
                e.printStackTrace();
              }
            }
          }
        }
).start();
        new Thread(new Runnable(){
          @Override public void run(){
            DevicesJson json=Utils.getDevicesJson(getActivity());
            RootUtils.writePartition("String_Node_Str",json.getRecoveryPartition());
            installing=false;
            setTextTitle(getString(R.string.done) + "String_Node_Str");
          }
        }
).start();
      }
    }
);
    String text;
    if ((text=mDownloadsJson.getSize(i)) != null)     mDownloadCard.setSize(text);
    if ((text=mDownloadsJson.getNote(i)) != null)     mDownloadCard.setNote(text);
    addView(mDownloadCard);
  }
  animateRecyclerView();
}

Fixed version (ground truth):
private void refresh(String json){
  if (mDownloadsJson == null)   mDownloadsJson=new DownloadsJson(json);
 else   mDownloadsJson.refresh(json);
  removeAllViews();
  for (int i=0; i < mDownloadsJson.getLength(); i++) {
    DownloadCardViewItem.DDownloadCardView mDownloadCard=new DownloadCardViewItem.DDownloadCardView();
    mDownloadCard.setVersion(mDownloadsJson.getVersion(i));
    mDownloadCard.setMd5sum(mDownloadsJson.getMd5sum(i));
    mDownloadCard.setDownload(mDownloadsJson.getLink(i));
    mDownloadCard.setChangelog(mDownloadsJson.getChangelog(i));
    mDownloadCard.setOnDownloadListener(new DownloadCardViewItem.OnDownloadListener(){
      private boolean installing;
      @Override public void onSuccess(){
        new Thread(new Runnable(){
          @Override public void run(){
            int count=0;
            installing=true;
            while (installing) {
              try {
                count++;
                String title=getString(R.string.installing);
                for (int i=0; i < count; i++)                 title+="String_Node_Str";
                setTextTitle(title);
                if (count >= 5)                 count=0;
                Thread.sleep(500);
              }
 catch (              InterruptedException e) {
                e.printStackTrace();
              }
            }
          }
        }
).start();
        new Thread(new Runnable(){
          @Override public void run(){
            DevicesJson json=Utils.getDevicesJson(getActivity());
            RootUtils.writePartition("String_Node_Str",json.getRecoveryPartition());
            installing=false;
            setTextTitle(getString(R.string.done) + "String_Node_Str");
            getActivity().runOnUiThread(new Runnable(){
              @Override public void run(){
                Utils.confirmDialog(null,getString(R.string.installation_success),new Utils.OnConfirmDialogListener(){
                  @Override public void onDismiss(){
                  }
                  @Override public void onConfirm(){
                    Utils.reboot();
                  }
                }
,getActivity());
              }
            }
);
          }
        }
).start();
      }
    }
);
    String text;
    if ((text=mDownloadsJson.getSize(i)) != null)     mDownloadCard.setSize(text);
    if ((text=mDownloadsJson.getNote(i)) != null)     mDownloadCard.setNote(text);
    addView(mDownloadCard);
  }
  animateRecyclerView();
}