blob: 5478eab2101de8ae45e7049e2a0ba7bb9c78a027 [file] [log] [blame]
package com.bumptech.glide.provider;
import com.bumptech.glide.load.Encoder;
import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.load.ResourceEncoder;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
import java.io.File;
/**
* A {@link com.bumptech.glide.provider.LoadProvider} that returns classes preferentially from those set on it but
* that also defaults to a wrapped {@link com.bumptech.glide.provider.LoadProvider} when a particular class is not set.
*
* @param <A> The type of the model the resource will be loaded from.
* @param <T> The type of the data that will be retrieved for the model.
* @param <Z> The type of the resource that will be decoded from the data.
* @param <R> The type of the resource that will be transcoded from the decoded resource.
*/
public class ChildLoadProvider<A, T, Z, R> implements LoadProvider<A, T, Z, R>, Cloneable {
private final LoadProvider<A, T, Z, R> parent;
private ResourceDecoder<File, Z> cacheDecoder;
private ResourceDecoder<T, Z> sourceDecoder;
private ResourceEncoder<Z> encoder;
private ResourceTranscoder<Z, R> transcoder;
private Encoder<T> sourceEncoder;
public ChildLoadProvider(LoadProvider<A, T, Z, R> parent) {
this.parent = parent;
}
@Override
public ModelLoader<A, T> getModelLoader() {
return parent.getModelLoader();
}
/**
* Sets the {@link com.bumptech.glide.load.ResourceDecoder} to use for decoding the resource from the disk cache.
*
* @param cacheDecoder The decoder to use.
*/
public void setCacheDecoder(ResourceDecoder<File, Z> cacheDecoder) {
this.cacheDecoder = cacheDecoder;
}
/**
* Sets the {@link com.bumptech.glide.load.ResourceDecoder} to use to decoding the resource from the original data.
*
* @param sourceDecoder The decoder to use.
*/
public void setSourceDecoder(ResourceDecoder<T, Z> sourceDecoder) {
this.sourceDecoder = sourceDecoder;
}
/**
* Sets the {@link com.bumptech.glide.load.ResourceEncoder} to use to write the decoded and transformed resource to
* the disk cache.
*
* @param encoder The encoder to use.
*/
public void setEncoder(ResourceEncoder<Z> encoder) {
this.encoder = encoder;
}
/**
* Sets the {@link com.bumptech.glide.load.resource.transcode.ResourceTranscoder} to use to transcode the decoded
* resource.
*
* @param transcoder The transcoder to use.
*/
public void setTranscoder(ResourceTranscoder<Z, R> transcoder) {
this.transcoder = transcoder;
}
/**
* Sets the {@link com.bumptech.glide.load.Encoder} to use to write the original data to the disk cache.
*
* @param sourceEncoder The encoder to use.
*/
public void setSourceEncoder(Encoder<T> sourceEncoder) {
this.sourceEncoder = sourceEncoder;
}
/**
* {@inheritDoc}
*/
@Override
public ResourceDecoder<File, Z> getCacheDecoder() {
if (cacheDecoder != null) {
return cacheDecoder;
} else {
return parent.getCacheDecoder();
}
}
/**
* {@inheritDoc}
*/
@Override
public ResourceDecoder<T, Z> getSourceDecoder() {
if (sourceDecoder != null) {
return sourceDecoder;
} else {
return parent.getSourceDecoder();
}
}
/**
* {@inheritDoc}
*/
@Override
public Encoder<T> getSourceEncoder() {
if (sourceEncoder != null) {
return sourceEncoder;
} else {
return parent.getSourceEncoder();
}
}
/**
* {@inheritDoc}
*/
@Override
public ResourceEncoder<Z> getEncoder() {
if (encoder != null) {
return encoder;
} else {
return parent.getEncoder();
}
}
/**
* {@inheritDoc}
*/
@Override
public ResourceTranscoder<Z, R> getTranscoder() {
if (transcoder != null) {
return transcoder;
} else {
return parent.getTranscoder();
}
}
@SuppressWarnings("unchecked")
@Override
public ChildLoadProvider<A, T, Z, R> clone() {
try {
return (ChildLoadProvider<A, T, Z, R>) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}