package com.bumptech.glide.load.resource.bitmap;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.util.Preconditions;
import java.io.IOException;
/**
* Decodes an {@link android.graphics.drawable.BitmapDrawable} for a data type.
*
* @param <DataType> The type of data that will be decoded.
*/
public class BitmapDrawableDecoder<DataType> implements ResourceDecoder<DataType, BitmapDrawable> {
private final ResourceDecoder<DataType, Bitmap> decoder;
private final Resources resources;
private final BitmapPool bitmapPool;
public BitmapDrawableDecoder(Context context, ResourceDecoder<DataType, Bitmap> decoder) {
this(context.getResources(), Glide.get(context).getBitmapPool(), decoder);
}
public BitmapDrawableDecoder(Resources resources, BitmapPool bitmapPool,
ResourceDecoder<DataType, Bitmap> decoder) {
this.resources = Preconditions.checkNotNull(resources);
this.bitmapPool = Preconditions.checkNotNull(bitmapPool);
this.decoder = Preconditions.checkNotNull(decoder);
}
@Override
public boolean handles(DataType source, Options options) throws IOException {
return decoder.handles(source, options);
}
@Override
public Resource<BitmapDrawable> decode(DataType source, int width, int height, Options options)
throws IOException {
Resource<Bitmap> bitmapResource = decoder.decode(source, width, height, options);
if (bitmapResource == null) {
return null;
}
return LazyBitmapDrawableResource.obtain(resources, bitmapPool, bitmapResource.get());
}
}