@Override
  protected void bindHolder(ViewHolder h) {
    RecentMessageThreadHolder viewHolder = (RecentMessageThreadHolder) h;
    MessageThread messageThread = (MessageThread) viewHolder.data;

    if (messageThread.getUnreadCount() == 0) {
      viewHolder.getTextView().setText(messageThread.getUserWith().getName());
    } else {
      viewHolder
          .getTextView()
          .setText(
              messageThread.getUserWith().getName() + " (" + messageThread.getUnreadCount() + ")");
    }
    viewHolder.getSnippet().setText(messageThread.getSnippet());

    if ("available".equals(messageThread.getUserWith().getPresence())) {
      viewHolder.getUserPresence().setImageResource(R.drawable.circle_green);
    } else {
      viewHolder.getUserPresence().setImageResource(R.drawable.circle_red);
    }

    long messageThreadTime = messageThread.getTime();
    viewHolder.getLastTime().setText(findTime(messageThreadTime));

    final ProgressBar spinner = viewHolder.getProgressBar();
    imageLoader.displayImage(
        messageThread.getUserWith().getProfilePictureSquare(75),
        viewHolder.getImageView(),
        Utils.DEFAULT_IMAGE_OPTIONS,
        new SimpleImageLoadingListener() {
          @Override
          public void onLoadingStarted(String imageUri, View view) {
            spinner.setVisibility(View.VISIBLE);
          }

          @Override
          public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            spinner.setVisibility(View.GONE);
          }

          @Override
          public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            spinner.setVisibility(View.GONE);
          }
        });
  }