package com.bumptech.glide.load.resource.gifbitmap; import android.graphics.Bitmap; import com.bumptech.glide.load.Encoder; import com.bumptech.glide.load.ResourceDecoder; import com.bumptech.glide.load.ResourceEncoder; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.model.ImageVideoWrapper; import com.bumptech.glide.load.resource.file.FileToStreamDecoder; import com.bumptech.glide.load.resource.gif.GifDrawable; import com.bumptech.glide.provider.DataLoadProvider; import java.io.File; import java.io.InputStream; /** * An {@link com.bumptech.glide.provider.DataLoadProvider} that can load either an * {@link com.bumptech.glide.load.resource.gif.GifDrawable} or an {@link Bitmap} from either an * {@link java.io.InputStream} or an {@link android.os.ParcelFileDescriptor}. */ public class ImageVideoGifDrawableLoadProvider implements DataLoadProvider { private final ResourceDecoder cacheDecoder; private final ResourceDecoder sourceDecoder; private final ResourceEncoder encoder; private final Encoder sourceEncoder; public ImageVideoGifDrawableLoadProvider(DataLoadProvider bitmapProvider, DataLoadProvider gifProvider, BitmapPool bitmapPool) { final GifBitmapWrapperResourceDecoder decoder = new GifBitmapWrapperResourceDecoder( bitmapProvider.getSourceDecoder(), gifProvider.getSourceDecoder(), bitmapPool ); cacheDecoder = new FileToStreamDecoder(new GifBitmapWrapperStreamResourceDecoder(decoder)); sourceDecoder = decoder; encoder = new GifBitmapWrapperResourceEncoder(bitmapProvider.getEncoder(), gifProvider.getEncoder()); //TODO: what about the gif provider? sourceEncoder = bitmapProvider.getSourceEncoder(); } @Override public ResourceDecoder getCacheDecoder() { return cacheDecoder; } @Override public ResourceDecoder getSourceDecoder() { return sourceDecoder; } @Override public Encoder getSourceEncoder() { return sourceEncoder; } @Override public ResourceEncoder getEncoder() { return encoder; } }