GifBitmapWrapperDrawableTranscoder.java revision 44b89ba468c3f0f996bf1497d2f55fc9b50de0e8
1package com.bumptech.glide.load.resource.transcode;
2
3import android.graphics.Bitmap;
4import android.graphics.drawable.Drawable;
5import com.bumptech.glide.Resource;
6import com.bumptech.glide.load.resource.gif.GifData;
7import com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapper;
8
9public class GifBitmapWrapperDrawableTranscoder implements ResourceTranscoder<GifBitmapWrapper, Drawable> {
10    private final ResourceTranscoder<Bitmap, ? extends Drawable> bitmapDrawableResourceTranscoder;
11    private final ResourceTranscoder<GifData, ? extends Drawable> gifDrawableResourceTranscoder;
12
13    public GifBitmapWrapperDrawableTranscoder(ResourceTranscoder<Bitmap, ? extends Drawable> bitmapDrawableResourceTranscoder,
14            ResourceTranscoder<GifData, ? extends Drawable> gifDrawableResourceTranscoder) {
15        this.bitmapDrawableResourceTranscoder = bitmapDrawableResourceTranscoder;
16        this.gifDrawableResourceTranscoder = gifDrawableResourceTranscoder;
17    }
18
19    @SuppressWarnings("unchecked")
20    @Override
21    public Resource<Drawable> transcode(Resource<GifBitmapWrapper> toTranscode) {
22        GifBitmapWrapper gifBitmap = toTranscode.get();
23        Resource<Bitmap> bitmapResource = gifBitmap.getBitmapResource();
24
25        final Resource<? extends Drawable> result;
26        if (bitmapResource != null) {
27            result = bitmapDrawableResourceTranscoder.transcode(bitmapResource);
28        } else {
29            result = gifDrawableResourceTranscoder.transcode(gifBitmap.getGifResource());
30        }
31        // This is unchecked but always safe, anything that extends a Drawable can be safely cast to a Drawable.
32        return (Resource<Drawable>) result;
33    }
34
35    @Override
36    public String getId() {
37        return "GifBitmapWrapperDrawableTranscoder.com.bumptech.glide.load.resource.transcode";
38    }
39}
40