Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.koushikdutta.ion;
  
  import  android.graphics.Bitmap;
  import  android.os.Build;
  import  android.view.animation.Animation;
  import  android.view.animation.AnimationUtils;
  import  android.widget.ImageView;
  
 
Created by koush on 5/23/13.
 
 abstract class IonBitmapRequestBuilder implements BitmapFutureBuilderBuilders.Any.BF {
     private static final SimpleFuture<Bitmap> FUTURE_BITMAP_NULL_URI = new SimpleFuture<Bitmap>() {
         {
             setComplete(new NullPointerException("uri"));
         }
     };
 
     Ion ion;
     int resizeWidth;
     int resizeHeight;
     boolean disableFadeIn;
     boolean animateGif = true;
     boolean deepZoom;
 
     void reset() {
          = null;
          = null;
          = .;
          = 0;
          = 0;
          = false;
          = true;
          = null;
          = false;
          = null;
     }
 
     public IonBitmapRequestBuilder(IonRequestBuilder builder) {
         this. = builder;
          = builder.ion;
     }
 
     public IonBitmapRequestBuilder(Ion ion) {
         this. = ion;
     }
 
     static void doAnimation(ImageView imageView, Animation animationint animationResource) {
         if (imageView == null)
             return;
         if (animation == null && animationResource != 0)
             animation = AnimationUtils.loadAnimation(imageView.getContext(), animationResource);
         if (animation == null) {
             imageView.setAnimation(null);
             return;
         }
 
         imageView.startAnimation(animation);
     }
 
     protected IonRequestBuilder ensureBuilder() {
         return ;
     }
 
     @Override
     public IonBitmapRequestBuilder transform(Transform transform) {
         if (transform == null)
             return this;
         if ( == null)
              = new ArrayList<Transform>();
         .add(transform);
         return this;
     }
 
     @Override
     public IonBitmapRequestBuilder postProcess(PostProcess postProcess) {
         if (this. == null)
             this. = new ArrayList<PostProcess>();
         this..add(postProcess);
         return transform(new TransformBitmap.PostProcessNullTransform(postProcess.key()));
     }
    private String computeDownloadKey() {
        String downloadKey = .;
        // although a gif is always same download, the decode (non/animated) result may different
        if (!)
            downloadKey += ":!animateGif";
        if ()
            downloadKey += ":deepZoom";
        return FileCache.toKeyString(downloadKey);
    }
    protected void finalizeResize() {
    }
    public String computeBitmapKey(String downloadKey) {
        assert downloadKey != null;
        if ( > 0 ||  > 0 ||  != .) {
            finalizeResize();
            if ( < 0 &&  < 0) {
                throw new IllegalStateException("must provide valid resize dimensions if using" +
                "centerCrop or centerInside\n\n" +
                "Valid values: (<=0, Y) or (X, <=0), or (X, Y), where:\n" +
                "X and Y are greater than 0. Specifying <=0 values will scale proportionately.\n" +
                "Values can also be implied through layout parameters.");
            }
            if ( == null)
                 = new ArrayList<Transform>();
            .add(0, new DefaultTransform());
        }
        // determine the key for this bitmap after all transformations
        String bitmapKey = downloadKey;
        if (hasTransforms()) {
            for (Transform transform : ) {
                bitmapKey += transform.key();
            }
            bitmapKey = FileCache.toKeyString(bitmapKey);
        }
        return bitmapKey;
    }
    @Override
        if (. || )
            return .;
        final String downloadKey = computeDownloadKey();
        String bitmapKey = computeBitmapKey(downloadKey);
        BitmapInfo info = ...get(bitmapKey);
        // memory cache
        if (info != null && info.bitmaps != null)
            return .;
        FileCache fileCache = ..getFileCache();
        if (hasTransforms() && fileCache.exists(bitmapKey))
            return .;
        if (fileCache.exists(downloadKey))
            return .;
        return .;
    }
    @Override
    public BitmapInfo asCachedBitmap() {
        final String downloadKey = computeDownloadKey();
        String bitmapKey = computeBitmapKey(downloadKey);
        return ...get(bitmapKey);
    }
        final String downloadKey = computeDownloadKey();
        String bitmapKey = computeBitmapKey(downloadKey);
        // TODO: eliminate this allocation?
        BitmapFetcher ret = new BitmapFetcher();
        ret.downloadKey = downloadKey;
        ret.bitmapKey = bitmapKey;
        ret.hasTransforms = hasTransforms();
        ret.resizeWidth = ;
        ret.resizeHeight = ;
        ret.builder = ;
        ret.transforms = ;
        ret.animateGif = ;
        ret.deepZoom = ;
        ret.postProcess = ;
        // see if this request can be fulfilled from the cache
        if (!.) {
            BitmapInfo bitmap = ...get(bitmapKey);
            if (bitmap != null) {
                ret.info = bitmap;
                return ret;
            }
        }
        return ret;
    }
    @Override
    public Future<Bitmap> asBitmap() {
        if (. == null) {
            return ;
        }
        // see if we get something back synchronously
        final BitmapFetcher bitmapFetcher = executeCache();
        if (bitmapFetcher.info != null) {
            SimpleFuture<Bitmap> ret = new SimpleFuture<Bitmap>();
            Bitmap bitmap = bitmapFetcher.info.bitmaps == null ? null : bitmapFetcher.info.bitmaps[0];
            ret.setComplete(bitmapFetcher.info.exceptionbitmap);
            return ret;
        }
        final BitmapInfoToBitmap ret = new BitmapInfoToBitmap(.);
        AsyncServer.post(.new Runnable() {
            @Override
            public void run() {
                bitmapFetcher.execute();
                // we're loading, so let's register for the result.
                ..add(bitmapFetcher.bitmapKeyret);
            }
        });
        return ret;
    }
    @Override
        if (hasTransforms()) {
            throw new IllegalStateException("Can't apply centerCrop after transform has been called." +
            "centerCrop is applied to the original resized bitmap.");
        }
        if ( <= 0 ||  <= 0)
            throw new IllegalStateException("must call resize first");
         = .;
        return this;
    }
    @Override
        if (hasTransforms()) {
            throw new IllegalStateException("Can't apply centerInside after transform has been called." +
            "centerInside is applied to the original resized bitmap.");
        }
        if ( <= 0 ||  <= 0)
            throw new IllegalStateException("must call resize first");
         = .;
        return this;
    }
    @Override
    public IonBitmapRequestBuilder resize(int widthint height) {
        // TODO: prevent multiple calls to resize and friends?
        if (hasTransforms()) {
            throw new IllegalStateException("Can't apply resize after transform has been called." +
            "resize is applied to the original bitmap.");
        }
        if ()
            throw new IllegalStateException("Can not resize with deepZoom.");
         = width;
         = height;
        return this;
    }
    @Override
    public IonBitmapRequestBuilder resizeWidth(int width) {
        return resize(width, 0);
    }
    @Override
    public IonBitmapRequestBuilder resizeHeight(int height) {
        return resize(0, height);
    }
    @Override
        this. = true;
        return this;
    }
	public IonBitmapRequestBuilder smartSize(boolean smartSize) {
        //don't want to disable device resize if user has already resized the Bitmap.
        if ( > 0 ||  > 0)
            throw new IllegalStateException("Can't set smart size after resize has been called.");
        if ()
            throw new IllegalStateException("Can not smartSize with deepZoom.");
        if (!smartSize) {
		}
        else {
             = 0;
             = 0;
        }
		return this;
	}
    @Override
    public IonBitmapRequestBuilder animateGif(boolean animateGif) {
        this. = animateGif;
        return this;
    }
    @Override
    public IonBitmapRequestBuilder deepZoom() {
        if (Build.VERSION.SDK_INT < 10)
            return this;
        this. = true;
        if ( > 0 ||  > 0)
            throw new IllegalStateException("Can't deepZoom with resize.");
        if (hasTransforms())
            throw new IllegalStateException("Can't deepZoom with transforms.");
         = 0;
         = 0;
        return this;
    }
    boolean hasTransforms() {
        return  != null && .size() > 0;
    }
New to GrepCode? Check out our FAQ X