private IonDrawable setIonDrawable(ImageView imageView, BitmapInfo info, int loadedFrom) {
   IonDrawable ret =
       IonDrawable.getOrCreateIonDrawable(imageView)
           .ion(ion)
           .setBitmap(info, loadedFrom)
           .setSize(resizeWidth, resizeHeight)
           .setError(errorResource, errorDrawable)
           .setPlaceholder(placeholderResource, placeholderDrawable)
           .setInAnimation(inAnimation, inAnimationResource)
           .setDisableFadeIn(disableFadeIn);
   imageView.setImageDrawable(ret);
   return ret;
 }
  @Override
  public Future<ImageView> intoImageView(ImageView imageView) {
    if (imageView == null) throw new IllegalArgumentException("imageView");
    assert Thread.currentThread() == Looper.getMainLooper().getThread();

    if (builder.uri != null && builder.uri.startsWith("android.resource:/")) {
      IonDrawable drawable = setIonDrawable(imageView, null, 0);
      SimpleFuture<ImageView> imageViewFuture = drawable.getFuture();
      imageViewFuture.reset();
      imageView.setImageURI(Uri.parse(builder.uri));
      imageViewFuture.setComplete(null, imageView);
      return imageViewFuture;
    }

    // no uri? just set a placeholder and bail
    if (builder.uri == null) {
      setIonDrawable(imageView, null, 0).cancel();
      return FUTURE_IMAGEVIEW_NULL_URI;
    }

    // executeCache the request, see if we get a bitmap from cache.
    BitmapFetcher bitmapFetcher = executeCache();
    if (bitmapFetcher.info != null) {
      doAnimation(imageView, null, 0);
      IonDrawable drawable =
          setIonDrawable(imageView, bitmapFetcher.info, Loader.LoaderEmitter.LOADED_FROM_MEMORY);
      drawable.cancel();
      SimpleFuture<ImageView> imageViewFuture = drawable.getFuture();
      imageViewFuture.reset();
      imageViewFuture.setComplete(bitmapFetcher.info.exception, imageView);
      return imageViewFuture;
    }

    // nothing from cache, check to see if there's too many imageview loads
    // already in progress
    if (BitmapFetcher.shouldDeferImageView(ion)) {
      bitmapFetcher.defer();
    } else {
      bitmapFetcher.execute();
    }

    IonDrawable drawable = setIonDrawable(imageView, null, 0);
    doAnimation(imageView, loadAnimation, loadAnimationResource);
    SimpleFuture<ImageView> imageViewFuture = drawable.getFuture();
    imageViewFuture.reset();
    drawable.register(ion, bitmapFetcher.bitmapKey);
    return imageViewFuture;
  }