@Override
  protected void onPostExecute(Bitmap bitmap) {

    // Checks if has been canceled due to imageView recycling
    if (isCancelled()) {
      // bitmap = null;
      return;
    }

    // The bitmap will now be attached to view
    if (imageViewReference != null && bitmap != null) {
      final SquareImageView imageView = imageViewReference.get();

      // Checks if is still the task in charge to load image on that imageView
      if (imageView != null && this == (BitmapWorkerTask) imageView.getAsyncTask()) {

        // If the bitmap was already cached it will be directly attached to view
        if (wasCached) {
          imageView.setImageBitmap(bitmap);
        }

        // Otherwise a fading transaction will be used to shot it
        else {
          // Transition with transparent drawabale and the final bitmap
          final TransitionDrawable td =
              new TransitionDrawable(
                  new Drawable[] {
                    new ColorDrawable(Color.TRANSPARENT),
                    new BitmapDrawable(mActivity.getResources(), bitmap)
                  });
          if (td != null) {
            imageView.setImageDrawable(td);
            td.startTransition(FADE_IN_TIME);
          }
        }
      }
    } else {
      if (this.mOnAttachingFileErrorListener != null) {
        mOnAttachingFileErrorListener.onAttachingFileErrorOccurred(mAttachment);
      }
    }
  }
  public static boolean isNewWork(Uri uri, SquareImageView imageView) {
    final BitmapWorkerTask bitmapWorkerTask = (BitmapWorkerTask) imageView.getAsyncTask();

    if (bitmapWorkerTask != null && bitmapWorkerTask.getAttachment() != null) {
      final Uri bitmapData = bitmapWorkerTask.getAttachment().getUri();
      // If bitmapData is not yet set or it differs from the new data
      if (bitmapData == null || bitmapData != uri) {
        // Cancel previous task
        bitmapWorkerTask.cancel(true);
      } else {
        // The same work is already in progress
        return false;
      }
    }
    // No task associated with the ImageView, or an existing task was
    // cancelled
    return true;
  }